即使我重载=运算符,也无法生成赋值运算符

时间:2010-11-24 18:11:18

标签: c++ visual-studio-2008 warnings

我的班级是多态的,不应该被用来='d d。它有一个Font&类型的成员。因此编译器无法生成=运算符。所以我刚刚创建了赋值和复制构造函数的虚拟实现,将它们放在类的私有中,但它仍然警告我,无法生成赋值运算符。我怎么能摆脱这个警告?

由于

警告9警告C4512:'AguiWidget':无法生成赋值运算符c:\ users \ josh \ documents \ visual studio 2008 \ projects \ agui \ alleg_5 \ agui \ aguiwidget.hpp 250

3 个答案:

答案 0 :(得分:9)

编译器警告您的赋值运算符是您自己的类的赋值运算符。你现在拥有的是:

AguiWidget& operator=(const AguiFont &tmp);

您需要的是:

AguiWidget& operator=(const AguiWidget &tmp);

答案 1 :(得分:3)

你可以禁用它。当然,如果您真的尝试使用这些运算符,这将无效。

你确定签名是正确的吗?你是为每个班级,基础和衍生作出的吗?

答案 2 :(得分:2)

使用boost::noncopyable

class AGUI_CORE_DECLSPEC AguiWidget : private boost::noncopyable

注:

对所有子类也将强制执行boost :: noncopyable。

编辑:

哇......这是一个可怕的课......

使用pimpl idiom减少代码相互依赖性并提高界面可读性。

此外,您应该尝试避免受保护的成员变量(尽可能多),因为它会破坏封装。