【发布时间】:2020-07-10 18:16:58
【问题描述】:
在编译使用自定义复制构造函数的简单程序时,我收到 C2600 错误(在标题中)。
我的 .h 文件是
#pragma once
namespace uiuc {
class Cube {
public:
Cube();
double getVolume();
double getSurfaceArea();
void setLength(double length);
private:
double length_;
};
}
我的 Cube.cpp 文件是
#include "Cube.h"
#include <iostream>
namespace uiuc {
Cube::Cube() {
length_ = 1;
std::cout << "Default consturctor invoked" << std::endl;
}
Cube::Cube(const Cube& obj) {
length_ = obj.length_;
std::cout << "Copy consturctor invoked" << std::endl;
}
double Cube::getVolume() {
return length_ * length_* length_;
}
double Cube::getSurfaceArea() {
return 6 * length_* length_;
}
void Cube::setLength(double length) {
length_ = length;
}
}
而我的 main.cpp 文件是
#include <iostream>
#include "Cube.h"
int main() {
uiuc::Cube c;
uiuc::Cube mycube = c;
return 0;
}
我不明白为什么会抛出这个错误。有什么建议吗?
编辑:
非常感谢您的快速回复。我是 C++ 的新手,如果这看起来微不足道,我很抱歉。
正如其他人所提到的,修复方法是将Cube(const Cube& obj); 添加到头文件中。
【问题讨论】:
-
将此声明添加到您的类定义中
Cube(const Cube& obj); -
编译器错误告诉您确切地出了什么问题,以及如何解决它。
-
编译器不会抛出错误,抱歉,它很快就成了我的小烦恼。
-
This question 和 several others 几乎相同,只是它们尝试定义默认构造函数而不在类定义中声明它。
标签: c++ class constructor copy-constructor