Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 为什么{}不能被删除?为什么不能传输字符类型变量?_C++_Templates - Fatal编程技术网

C++ 为什么{}不能被删除?为什么不能传输字符类型变量?

C++ 为什么{}不能被删除?为什么不能传输字符类型变量?,c++,templates,C++,Templates,以下是源文件: myClass<T1,T2>::myClass(T1 a,T2 b):I(a),J(b){} #包括 #包括“ClassTemplate.h” 使用std::cout; 使用std::endl; int main() { myClass 1(3,5); 类别1.show(); myClass 2(3,“a”); class2.show(); myClass 3(2.9,10); class3.show(); } 错误编译结果如下: #include <ios

以下是源文件:

myClass<T1,T2>::myClass(T1 a,T2 b):I(a),J(b){}
#包括
#包括“ClassTemplate.h”
使用std::cout;
使用std::endl;
int main()
{
myClass 1(3,5);
类别1.show();
myClass 2(3,“a”);
class2.show();
myClass 3(2.9,10);
class3.show();
}
错误编译结果如下:

#include <iostream>
#include "ClassTemplate.h"

using std::cout;
using std::endl;

int main()
{
     myClass<int,int> class1(3,5);
     class1.show();

     myClass<int,char> class2(3,"a");
     class2.show();

     myClass<double,int> class3(2.9,10);
     class3.show();
}
$g++ClassTemplate\u Test.cpp
ClassTemplate_Test.cpp:在函数“int main()”中:
ClassTemplate_Test.cpp:12:36:错误:从“const char*”到“char”[-fppermissive]的转换无效
ClassTemplate.h:20:1:错误:初始化'myClass::myClass(T1,T2)[with T1=int,T2=char]'[-fppermissive]的参数2
如何解决?谢谢

$ g++ ClassTemplate_Test.cpp 
ClassTemplate_Test.cpp: In function ‘int main()’:
ClassTemplate_Test.cpp:12:36: error: invalid conversion from ‘const char*’ to ‘char’ [-fpermissive]
ClassTemplate.h:20:1: error:   initializing argument 2 of ‘myClass<T1, T2>::myClass(T1, T2) [with T1 = int, T2 = char]’ [-fpermissive]
至于您的编译错误,只需从“”到“”进行简单的修复即可解决

改变

myClass<T1,T2>::myClass(T1 a,T2 b)
   :I(a),J(b)
{

}
myClass 2(3,“a”);

myClass类2(3,'a');
这是因为
“a”
被视为类型为
const char*
的a<另一方面,代码>'a'被视为您和您的构造函数所期望的
字符。

myClass::myClass(T1 a,t2b):I(a),J(b){}
myClass<int,char> class2(3,'a');

这定义了一个函数。功能有一个主体。函数体定义为花括号(即:{})之间的内容。因此,即使函数为空,也必须用一对大括号来定义它。

它是构造函数的(主体)定义。它是空的,但即使是空的定义也是一个定义。必须定义构造函数。请尝试传递“a”而不是“a”。“a'是字符,“a”是常量字符*+1。这就像编写
void f(){}
这是一个具有空体的函数。
myClass<T1,T2>::myClass(T1 a,T2 b)
   :I(a),J(b)
{

}
myClass<int,char> class2(3,"a");
myClass<int,char> class2(3,'a');
myClass<T1,T2>::myClass(T1 a,T2 b):I(a),J(b){}