c++ - C++ 错误 C2600:无法定义编译器生成的特殊成员函数(必须先在类中声明)
问题描述
在编译使用自定义复制构造函数的简单程序时,我收到 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);
到头文件中。
解决方案
您没有在 .h 文件中声明构造函数。
它应该如下所示:
#pragma once
namespace uiuc {
class Cube {
public:
Cube();
Cube(const Cube& obj); // This was missing.
double getVolume();
double getSurfaceArea();
void setLength(double length);
private:
double length_;
};
}
然后在那之后你应该能够在类定义之外定义它。
推荐阅读
- mysql - MySQL 'set names latin1' 似乎导致数据存储为 utf8
- linq - 为什么使用 linq 或实体 .. 不直接使用来自 ado.net 的数据
- mysql - NodeJS 和 MariaDB。避免查询每一列
- laravel - 如何在 Laravel 中使用包含集合
- c++ - 模板参数扣除/替换失败:地图没有第一,第二吗?
- python - Django 和技术领域
- graphql - 将一个graphql查询的结果输入另一个?
- perl - 检测编译后的perl脚本是否动态加载模块
- arduino - ESP32 外部引脚唤醒,带内部上拉电阻
- javascript - 如何通过 HTTP AJAX 请求运行 python 脚本?