gpt4 book ai didi

c++ g++ 编译器 - 错误 : definition of implicitly-declared

转载 作者:行者123 更新时间:2023-12-02 10:00:44 27 4
gpt4 key购买 nike

我搜索了教科书和网络。我似乎找不到任何东西来解释底部的错误。它们来自 Copy 构造函数和 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)
错误^
任何理解这一点的帮助表示赞赏。

最佳答案

H.Krisnan 在评论中所说的话。让那些get函数常量。这对于类以外任何可以通过 SurveyData 的地方来说可能都是好事。通过 const 引用。所以继续做吧。
然而....
实际上,您的类中不需要复制构造函数或重载赋值运算符。由于您的类没有任何分配的指针或无法使用浅拷贝服务的成员,因此编译器生成的默认复制构造函数和默认赋值运算符会做得很好。因此,稍后当您向 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;
};
但是如果你真的需要一个复制构造函数或赋值运算符,这些方法可以访问私有(private)数据。所以你总是可以说:
  SurveyData& SurveyData::operator=(const SurveyData& s)
{
sector = s.sector;
exposure = s.exposure;
speed = s.speed;
return *this;
}

关于c++ g++ 编译器 - 错误 : definition of implicitly-declared,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62689847/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com