Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/145.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 即使我重载=运算符,也无法生成赋值运算符_C++_Visual Studio 2008_Warnings - Fatal编程技术网

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

C++ 即使我重载=运算符,也无法生成赋值运算符,c++,visual-studio-2008,warnings,C++,Visual Studio 2008,Warnings,我的类是多态性的,无论如何都不应该被用作class='d。它有一个Font类型的成员&因此编译器无法生成=运算符。所以我只是创建了赋值和复制构造函数的虚拟实现,将它们放在类的私有中,但它仍然警告我赋值运算符无法生成。我还能怎样摆脱这个警告呢 谢谢 警告9警告C4512:“AguiWidget”:无法生成赋值运算符c:\users\josh\documents\visual studio 2008\projects\agui\Allege\u 5\agui\AguiWidget.hpp 250您可

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

谢谢


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

您可以禁用它。当然,如果你真的想使用这些操作符,这是行不通的

你确定你的签名是对的吗?您为每个类、基本类和派生类制作了它们吗?

使用

注:

所有子类也将强制使用noncopyable

编辑:

哇。。。那是一门可怕的课

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


此外,还应尽量避免使用受保护的成员变量,因为它会破坏封装。

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

AguiWidget& operator=(const AguiFont &tmp);
您需要的是:

AguiWidget& operator=(const AguiWidget &tmp);

请发一些密码。(bis repetitas)好吧,代码太多了,你能告诉我们它到底在抱怨哪一行吗?你不应该删除整个代码,只需发布相关部分即可你必须为每种类型都做吗?是的。这实际上是一个愚蠢而无用的警告;除非你真的尝试使用这些操作符,否则这无关紧要,它会阻塞很多有用的构造(boost会导致它吐出十亿个)。您应该考虑全局禁用它。您还应该声明它是私有的——这使得任何试图使用复制赋值操作符的编译时错误(相对于链接时间)。@ TabBi33:它已经是私有的。OP刚才删除了他的代码。@Tabber33:哦,对不起。OP在他的问题中提到了“把它们放在班级的私人空间”,所以我相信是这样的没有必要为了这么简单的事情而将Boost拖到这里(除非他已经在使用Boost)。OP所要做的就是修改赋值运算符,使其接受类型为
AguiWidget
的参数,而不是
AguiFont
。这是一门可怕的课程。但是,如果他不使用boost,那么他应该创建自己的“不可复制”类,因为它提高了可读性并清楚地显示了意图。@Praetorian您还打算如何创建一个包含近30个事件回调的widget类,GuiChan的widget类也相当大。@ronag该类是抽象的anyways@ronagAguiWidget的派生类如何在不受保护的情况下重写?
AguiWidget& operator=(const AguiWidget &tmp);