所以我正在尝试为类 Orbit 编写一个复制构造函数:
class Orbit
{
private:
vector<int> m_start;
public:
// ...
const vector<int>& getStart() {return start; }
}
像那样:
Orbit::Orbit(const Orbit& toCopy)
{
m_start = toCopy.getStart();
}
但我得到的是:
orbit.cpp:60:29: error: passing ‘const Orbit’ as ‘this’ argument discards qualifiers [-fpermissive]
m_start = toCopy.getStart();
做什么?
最佳答案
您需要制作 getStart()
成员函数 const
.这是编译器告诉你的。
const vector<int>& getStart() const {return start; }
此外,在这种情况下,您可以使用编译器生成的复制构造函数。它将做一个成员明智的复制,这对 std::vector<int>
没问题。 .这样做的好处是,编译器还将为您生成移动构造函数和移动赋值运算符(提供自定义复制构造函数可以防止这种情况发生),如果您有 std::vector
,这是有意义的。数据成员,因为移动构造它们的成本很低。
关于c++ - 复制构造函数并从方法中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56949892/