我搜索过教科书和网络。我似乎找不到任何东西来解释底部的错误。它们来自复制构造器和operator=重载。
1 #ifndef SURVEYDATA_H
2 #define SURVEYDATA_H
3
4 class SurveyData
5 {
6 public:
7 int getSector();
8 int getExposure();
9 int getSpeed();
10
11 SurveyData();
12 SurveyData(int, int, int);
13 SurveyData(const SurveyData&);
14
15 SurveyData& operator=(const SurveyData&);
16 private:
17 int sector;
18 int exposure;
19 int speed;
20 };
21 #endif
标题文件^
SurveyData::SurveyData(const SurveyData& s)
18 {
19 sector = s.getSector();
20 exposure = s.getExposure();
21 speed = s.getSpeed();
22 }
23
24 SurveyData& SurveyData::operator=(const SurveyData& s)
25 {
26 sector = s.getSector();
27 exposure = s.getExposure();
28 speed = s.getSpeed();
29 return *this;
30 }
.cpp文件的部分错误来自^
surveydata.cpp:17:43: error: definition of implicitly-declared ‘constexpr SurveyData::SurveyData(const SurveyData&)’
SurveyData::SurveyData(const SurveyData& s)
^
surveydata.cpp:24:54: error: definition of implicitly-declared ‘constexpr SurveyData& SurveyData::operator=(const SurveyData&)’
SurveyData& SurveyData::operator=(const SurveyData& s)
错误^任何帮助理解这一点的人都将不胜感激。
发布于 2020-07-02 06:10:05
H.Krisnan在评论中说了什么。使这些get
函数保持常量。对于类之外的任何地方,通过常量引用传递SurveyData
是有意义的,这可能是件好事。因此,请继续这样做。
然而……
实际上,您的类中既不需要复制构造函数,也不需要重载赋值操作符。由于您的类没有任何分配的指针或成员,无法使用浅拷贝进行服务,因此由编译器生成的默认拷贝构造函数和默认赋值操作符将会很好地工作。因此,稍后在向SurveyData添加新变量时,不会因为忘记更新复制构造函数而引入错误。
当一个成员(例如原始指针)需要显式分配才能使赋值有效时,实现复制构造函数和赋值运算符。您可能还需要一个析构函数:Rule off three。或者相反,如果您的类足够简单,它不需要析构函数,那么它可能也不需要显式定义复制构造函数或赋值运算符。
把它们拿出来。
class SurveyData
{
public:
int getSector() const;
int getExposure() const;
int getSpeed() const;
SurveyData();
SurveyData(int, int, int);
private:
int sector;
int exposure;
int speed;
};
但是,如果您确实需要一个复制构造函数或赋值操作符,这些方法可以访问私有数据。所以你总是可以说:
SurveyData& SurveyData::operator=(const SurveyData& s)
{
sector = s.sector;
exposure = s.exposure;
speed = s.speed;
return *this;
}
https://stackoverflow.com/questions/62689847
复制相似问题