我正在用C ++编写以下类。
class SImage {
...
public:
SImage(char*);
}
class SImageProc {
SImage S;
...
public:
SImageProc(SImage Im) { S = Im; };
}
编译时,我会收到引用我实现构造函数的行:
SImageProc.cpp:5:33: error: no matching function for call to 'SImage::SImage()'
我无法弄清楚为什么它在实现SImageProc类时将我的参数解释为类的实例。
答案 0 :(得分:4)
SImage
没有默认构造函数,因为您提供了构造函数SImage(char*)
。这意味着编译器不再提供默认编译器。
SImage
,导致错误。
您需要为SImage
提供默认构造函数,或者删除需要它的代码。如果没有更多细节,就不可能说哪种解决方案合适。
我的猜测是SImageProc
有一个SImage
数据成员,你没有在构造函数初始化列表中初始化它。这就是你解决这个问题的方法:
SImageProc(SImage Im) : S(Im) {};
对此的解释是,当您到达构造函数的主体时,所有数据成员和基础都已初始化。初始化后,您只能修改它们(在您的示例中,您将分配给S
。)如果您没有在构造函数初始化列表中显式初始化数据成员和基数,则它们(通常) get 默认初始化,在用户定义类型的情况下意味着调用默认构造函数。这是错误的来源。