此问题已在此处有答案:
error: no matching function for call to ‘Point::Point()(1个答案)
Use class as type in other class constructor(3个答案)
7天前关闭
我正在学习C++(20)。请看我的代码:
MyClass.h
class Spec
{
private:
int number;
public:
Spec() = delete;
Spec(int);
};
class MyClass
{
private:
int id;
Spec spec;
public:
MyClass() = delete;
MyClass(int, Spec);
};
MyClass.cpp
#include "MyClass.h"
Spec::Spec(int number)
{
this->number = number;
}
MyClass::MyClass(int id, Spec spec)
{
this->id = id;
this->spec = spec;
}
编译时返回:
/src/Hai.cpp: In constructor ‘MyClass::MyClass(int, Spec)’:
/src/Hai.cpp:8:35: error: use of deleted function ‘Spec::Spec()’
8 | MyClass::MyClass(int id, Spec spec)
我没有使用任何默认的构造函数,我甚至把它删除了.我不会在任何地方调用这些类的默认构造函数,我也不希望这些类是默认构造的。为什么编译器还问我应该有默认构造函数?是不是和复印操作有关?添加默认构造函数将处理错误,但我只是想知道为什么。
1条答案
按热度按时间00jrzges1#
private: Spec spec;
,并且在MyClass
的构造函数中没有成员初始化器列表,这导致为spec
运行默认构造函数。您的代码初始化了构造函数的
)
(参数结束)和{
(代码开始)之间的成员,然后在构造函数中赋值。使用成员初始值设定项: