重叠标识符

时间:2014-03-04 06:31:09

标签: c++

我正在用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类时将我的参数解释为类的实例。

1 个答案:

答案 0 :(得分:4)

SImage没有默认构造函数,因为您提供了构造函数SImage(char*)。这意味着编译器不再提供默认编译器。

}代码中的其他需要SImage,导致错误。

您需要为SImage提供默认构造函数,或者删除需要它的代码。如果没有更多细节,就不可能说哪种解决方案合适。

我的猜测是SImageProc有一个SImage数据成员,你没有在构造函数初始化列表中初始化它。这就是你解决这个问题的方法:

SImageProc(SImage Im) : S(Im) {};

对此的解释是,当您到达构造函数的主体时,所有数据成员和基础都已初始化。初始化后,您只能修改它们(在您的示例中,您分配给S。)如果您没有在构造函数初始化列表中显式初始化数据成员和基数,则它们(通常) get 默认初始化,在用户定义类型的情况下意味着调用默认构造函数。这是错误的来源。