C++ 错误 C2600:无法定义 compiler-generated 特殊成员函数(必须先在 class 中声明)
C++ Error C2600: Cannot define a compiler-generated special member function (must be declared in the class first)
我在编译一个使用自定义复制构造函数的简单程序时收到 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++ 的 brand-new,如果这看起来微不足道,我很抱歉。
正如其他人提到的那样,修复是将 Cube(const Cube& obj);
添加到 header 文件。
您没有在 .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_;
};
}
那么在那之后你应该能够在 class 定义之外定义它。
函数:
Cube::Cube(const Cube& obj) {
length_ = obj.length_;
std::cout << "Copy consturctor invoked" << std::endl;
}
在 cpp 文件中被声明为 Cube
的成员函数,但它在您的 class 定义中缺失。
应该在这里:
class Cube {
public:
Cube(const Cube& obj)
// ...
};
我在编译一个使用自定义复制构造函数的简单程序时收到 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++ 的 brand-new,如果这看起来微不足道,我很抱歉。
正如其他人提到的那样,修复是将 Cube(const Cube& obj);
添加到 header 文件。
您没有在 .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_;
};
}
那么在那之后你应该能够在 class 定义之外定义它。
函数:
Cube::Cube(const Cube& obj) {
length_ = obj.length_;
std::cout << "Copy consturctor invoked" << std::endl;
}
在 cpp 文件中被声明为 Cube
的成员函数,但它在您的 class 定义中缺失。
应该在这里:
class Cube {
public:
Cube(const Cube& obj)
// ...
};