代码之家  ›  专栏  ›  技术社区  ›  jmasterx

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

  •  5
  • jmasterx  · 技术社区  · 15 年前

    我的类是多态的,无论如何都不应该使用'd。它有一个字体类型的成员,因此编译器无法生成=运算符。所以我刚刚创建了赋值和复制构造函数的虚拟实现,将它们放在类的私有位置,但它仍然警告我赋值运算符无法生成。我还能怎样摆脱这个警告呢?

    谢谢

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

    3 回复  |  直到 15 年前
        1
  •  9
  •   casablanca    15 年前

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

    AguiWidget& operator=(const AguiFont &tmp);
    

    你需要的是:

    AguiWidget& operator=(const AguiWidget &tmp);
    
        2
  •  3
  •   Edward Strange    15 年前

    你可以禁用它。当然,如果你真的想用那些接线员的话,这是行不通的。

    你确定你的签名是对的吗?你为每一个班级,每一个基佬和每一个嘲笑者都做了吗?

        3
  •  2
  •   ronag    15 年前

    使用 boost::noncopyable .

    class AGUI_CORE_DECLSPEC AguiWidget : private boost::noncopyable
    

    注:

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

    编辑:

    真 的。。。那是一堂恐怖课。。。

    使用 pimpl idiom 以减少代码的相互依赖性并提高接口的可读性。

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