复制构造函数并从方法获取数据

Tro*_*tom 1 c++ object

因此,我试图为Orbit类编写一个副本构造函数:

class Orbit
{
     private:
     vector<int> m_start;

     public:
     // ...
     const vector<int>& getStart() {return start; }
}
Run Code Online (Sandbox Code Playgroud)

像那样:

Orbit::Orbit(const Orbit& toCopy)
{
     m_start = toCopy.getStart();
}
Run Code Online (Sandbox Code Playgroud)

但是我得到的是:

orbit.cpp:60:29: error: passing ‘const Orbit’ as ‘this’ argument discards qualifiers [-fpermissive]
   m_start = toCopy.getStart();
Run Code Online (Sandbox Code Playgroud)

做什么?

lub*_*bgr 5

您需要使getStart()成员函数const。这就是编译器告诉您的。

 const vector<int>& getStart() const {return start; }
Run Code Online (Sandbox Code Playgroud)

此外,在这种情况下,您可以使用编译器生成的副本构造函数。它将按成员进行复制,这对很好std::vector<int>。这样做的好处是,编译器还将为您生成move构造函数和move赋值运算符(提供自定义副本构造函数可以防止这种情况发生),如果您有std::vector数据成员,这是有意义的,因为这些对于移动构造而言很便宜。


Kla*_*aus 5

你必须让自己的方法 const

const vector<int>& getStart() const {return start; }
Run Code Online (Sandbox Code Playgroud)