gpt4 book ai didi

c++ - 重叠标识符

转载 作者:行者123 更新时间:2023-11-30 01:54:21 24 4
gpt4 key购买 nike

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

最佳答案

SImage 没有默认构造函数,因为您提供了构造函数 SImage(char*)。这意味着编译器不再提供默认的。您的代码中的某些其他地方 需要SImage,从而导致错误。

您需要为SImage 提供默认构造函数,或删除需要它的代码。如果没有更多详细信息,则无法说出哪一种解决方案是合适的。

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

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

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

关于c++ - 重叠标识符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22164593/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com