意外错误“;没有匹配的函数用于调用";,需要不带参数的构造函数 对于一个有经验的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++程序员来说,这可能是微不足道的,但我真的不明白我做错了什么。下面的代码位被减少到了最小值,因此它没有意义,但我只想了解它生成的编译器错误: 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的构造函数需要这样做

编译器(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的构造函数需要这样做呢

更让我感到奇怪的是,以下代码也没有错误:

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)
{
}