我的班级是多态的,不应该被用来='d d。它有一个Font&类型的成员。因此编译器无法生成=运算符。所以我刚刚创建了赋值和复制构造函数的虚拟实现,将它们放在类的私有中,但它仍然警告我,无法生成赋值运算符。我怎么能摆脱这个警告?
由于
警告9警告C4512:'AguiWidget':无法生成赋值运算符c:\ users \ josh \ documents \ visual studio 2008 \ projects \ agui \ alleg_5 \ agui \ aguiwidget.hpp 250
答案 0 :(得分:9)
编译器警告您的赋值运算符是您自己的类的赋值运算符。你现在拥有的是:
AguiWidget& operator=(const AguiFont &tmp);
您需要的是:
AguiWidget& operator=(const AguiWidget &tmp);
答案 1 :(得分:3)
你可以禁用它。当然,如果您真的尝试使用这些运算符,这将无效。
你确定签名是正确的吗?你是为每个班级,基础和衍生作出的吗?
答案 2 :(得分:2)
class AGUI_CORE_DECLSPEC AguiWidget : private boost::noncopyable
注:
对所有子类也将强制执行boost :: noncopyable。
编辑:
哇......这是一个可怕的课......使用pimpl idiom减少代码相互依赖性并提高界面可读性。
此外,您应该尝试避免受保护的成员变量(尽可能多),因为它会破坏封装。