提问人:proton 提问时间:9/5/2017 最后编辑:proton 更新时间:9/5/2017 访问量:138
ROOT 类的 C++ 赋值运算符
C++ assignment operator for ROOT class
问:
我正在使用 ROOT frameowrk,我想编写一个具有成员的类。我正在尝试为我的类编写和分配运算符,但由于编译问题而失败。该类将其赋值运算符保留为 。TMultiGraph
TMultiGraph
protected
我的班级的标题:
#include "../include/clipper.hpp"
#include "TMultiGraph.h"
#include "TColor.h"
#include "RtypesCore.h"
using namespace ClipperLib;
class ClipperDraw : protected TMultiGraph {
public:
ClipperDraw() {}
ClipperDraw& operator=(const ClipperDraw &c);
private:
TMultiGraph mg;
};
这是:.cpp
ClipperDraw& ClipperDraw::operator=(const ClipperDraw &c)
{
mg = c.mg;
return *this;
}
编译时,我收到以下消息:
g++ -fPIC -Wall `root-config --cflags` -I./include -O2 -c -o obj/ClipperDraw.o src/ClipperDraw.cpp
In file included from src/../include/ClipperDraw.h:12:0,
from src/ClipperDraw.cpp:8:
/home/user/anaconda3/envs/deepjetLinux3/include/TMultiGraph.h: In member function ‘ClipperDraw& ClipperDraw::operator=(const ClipperDraw&)’:
/home/user/anaconda3/envs/deepjetLinux3/include/TMultiGraph.h:47:17: error: ‘TMultiGraph& TMultiGraph::operator=(const TMultiGraph&)’ is protected
TMultiGraph& operator=(const TMultiGraph&);
^
src/ClipperDraw.cpp:26:5: error: within this context
mg = c.mg;
^
Makefile:19: recipe for target 'obj/ClipperDraw.o' failed
make: *** [obj/ClipperDraw.o] Error 1
答:
1赞
NathanOliver
9/5/2017
#1
的复制构造函数和复制赋值运算符都标记为受保护。这意味着您不能将 a 分配给另一个 .继承对你没有帮助,因为它不会改变这个事实。TMultiGraph
TMultiGraph
TMultiGraph
继承 will 所做的是允许创建自己的可以复制的图形类。那看起来像TMultiGraph
class MyMultiGraph : public TMultiGraph {
//...
public:
MyMultiGraph& operator =(const MyMultiGraph& rhs)
{
TMultiGraph::operator=(rhs);
// assign MyMultiGraph member here
}
};
评论
0赞
proton
9/5/2017
你的意思是你甚至不能写这样的东西?TMultiGrpah m,n; m=n;
0赞
NathanOliver
9/5/2017
@proton没错。由于它们被标记为受保护,因此只有从它派生的朋友或类才能访问函数。
0赞
proton
9/5/2017
所以在我的代码中,我应该写 - ?如何更改我写的运算符?mg = TMultiGraph::operator=(rhs.mg);
0赞
NathanOliver
9/5/2017
@proton 编号那行不通。您无法复制 .您的选择是从它派生的,并提供所需的功能,或者存储指针并复制指针。不过,执行后者意味着所有副本共享相同的图形。TMultiGraph
1赞
NathanOliver
9/5/2017
@proton 它允许您创建一个具有功能但允许您复制它的类。这不是一个很好的解决方案,因为你必须为每个函数编写一个函数,并且在这些函数中,你必须调用相应的函数。TMultiGraph
TMultiGraph
TMultiGraph
上一个:具有多重继承的复制赋值运算符
评论
TMultiGraph
TMultiGraph