C++ G++ 编译器 - 错误:隐式声明的定义
c++ g++ compiler - error: definition of implicitly-declared
我搜索了教科书和网络。我似乎找不到任何东西来解释底部的错误。它们来自复制构造器和运算符 = 重载。
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.Crisnan在评论中所说的话。 使这些get
函数恒定。 对于课堂之外的任何地方来说,通过常量引用传递SurveyData
都是有意义的,这可能是一件好事。 所以继续这样做。
然而。。。。
实际上,类中不需要复制构造函数或重载赋值运算符。由于您的类没有任何无法用浅拷贝提供服务的已分配指针或成员,因此编译器生成的默认复制构造函数和默认赋值运算符将做得很好。 因此,稍后当您向 SurveyData 添加新变量时,您不会引入错误,因为您忘记更新复制构造函数。
当需要显式分配成员(例如.raw指针(以使赋值有效时,实现复制构造函数和赋值运算符。您可能还需要一个析构函数:排除三个。 或者相反,如果您的类足够简单,不需要析构函数,则可能也不需要显式定义复制构造函数或赋值运算符。
就把这些拿出来吧。
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;
}
相关文章:
- 如何在C++中声明/定义相互依赖的模板?
- C++概念是否允许我的类在声明/定义中指定它满足某些概念?
- MSVC:无法识别的模板声明/定义(使用 Clang/GCC 编译)
- 我可以重用同一个模板来声明/定义多个东西吗(而不复制模板代码)
- C++-模板类中模板函数的单独声明/定义
- 在C 中使用继承时,请避免使用未缴纳的函数声明/定义
- C++模板能否确定所声明/定义的实例是否为常量
- 如何在程序中声明/定义一次并在两个类中使用映射列表
- LBNF,C函数声明/定义,减少冲突
- 声明/定义返回具有自动返回类型的 valarray 的函数时的隔离错误
- #用{}和声明定义混淆
- CTOR 声明/定义中接受的 const 限定符(LLVM 错误?)
- C++ 从一个源文件中声明/定义的变量从另一个源文件访问另一个源文件
- 无法识别的模板声明/定义
- 只在.cpp中声明/定义静态方法可以吗
- 声明/定义自定义类定制对象的正确方法
- typedef声明定义未命名类时链接失败
- 用visual c++实现COM对象的声明/定义和实例化
- VS 2012中的显式模板声明/定义
- 命名空间内的友元函数声明/定义