意外错误“;没有匹配的函数用于调用";,需要不带参数的构造函数 对于一个有经验的C++程序员来说,这可能是微不足道的,但我真的不明白我做错了什么。下面的代码位被减少到了最小值,因此它没有意义,但我只想了解它生成的编译器错误: class MyClass { public: int i; MyClass(int some_int); }; class MyOtherClass { public: MyClass c; MyOtherClass(MyClass mc); }; MyClass::MyClass(int some_int) { i = some_int; } MyOtherClass::MyOtherClass(MyClass mc) { c = mc; }
编译器(MinGW)出现以下错误:意外错误“;没有匹配的函数用于调用";,需要不带参数的构造函数 对于一个有经验的C++程序员来说,这可能是微不足道的,但我真的不明白我做错了什么。下面的代码位被减少到了最小值,因此它没有意义,但我只想了解它生成的编译器错误: class MyClass { public: int i; MyClass(int some_int); }; class MyOtherClass { public: MyClass c; MyOtherClass(MyClass mc); }; MyClass::MyClass(int some_int) { i = some_int; } MyOtherClass::MyOtherClass(MyClass mc) { c = mc; },c++,constructor,C++,Constructor,编译器(MinGW)出现以下错误: testfile.cpp: In constructor 'MyOtherClass::MyOtherClass(MyClass)': testfile.cpp:22:38: error: no matching function for call to 'MyClass::MyClass()' 果然,当我向MyClass添加一个没有参数的构造函数时,即MyClass::MyClass(),错误就消失了。但是为什么MyOtherClass的构造函数需要这样做
testfile.cpp: In constructor 'MyOtherClass::MyOtherClass(MyClass)':
testfile.cpp:22:38: error: no matching function for call to 'MyClass::MyClass()'
果然,当我向MyClass添加一个没有参数的构造函数时,即MyClass::MyClass(),错误就消失了。但是为什么MyOtherClass的构造函数需要这样做呢
更让我感到奇怪的是,以下代码也没有错误:
class MyClass
{
public:
int i;
MyClass(int some_int);
};
class MyOtherClass
{
public:
MyClass c;
//MyOtherClass(MyClass mc);
void setMyClass(MyClass mc);
};
MyClass::MyClass(int some_int)
{
i = some_int;
}
//MyOtherClass::MyOtherClass(MyClass mc)
//{
// c = mc;
//}
void MyOtherClass::setMyClass(MyClass mc)
{
c = mc;
}
因此,不知何故,
MyOtherClass::MyOtherClass(MyClass mc)
中的问题在MyOtherClass::setMyClass(MyClass mc)
中完全可以解决MyOtherClass
中的code>成为默认构造,但MyClass
没有默认构造函数
构造函数的主体在构造完所有成员后执行。要指定如何初始化/构造这些文件,您需要提供一个初始化列表:
啊,我想我明白了。我被给出错误的那一行也包含“MyClass mc”参数这一事实弄糊涂了,但现在我发现这与错误没有什么关系。这只是因为它是一个构造函数,所以它在执行主体之前尝试构造类的成员。我通过将构造函数参数更改为“inti”进行检查,得到了完全相同的错误。
MyOtherClass::MyOtherClass(MyClass mc)
: c(mc)
{
}