多重定义错误
Multiple definition error
我有一个类文件:grid.cpp
#include <iostream>
#define SIZE 10
using namespace std;
class Grid
{
private:
char **ptr;
public:
Grid(void);
void show();
};
Grid::Grid()
{
// sth ...
}
void Grid::show()
{
// sth ...
}
当我构建主类时,编译器失败。
|15|multiple definition of `Grid::Grid()'|
|28|multiple definition of `Grid::show()'|
怎么了?
问题是在标题中保留非inline
定义。:
- 将定义移动到实现文件
- 使它们成为
inline
。这可以通过两种方式实现:- 显式标记:
inline void Grid::show() { .... }
- 将定义移动到类定义中,它们将隐式地
inline
- 显式标记:
还可以使用include保护符(尽管这会导致不同的错误)。
您可能包含.cpp
文件而不是.h
。
您需要将.cpp
拆分为两个文件。只有一个.cpp
的副本和.h.
的副本(使用#include
)。
你的文件在传递给编译器之前是经过预处理的。可以看到#include
只是将包含文件的内容直接复制到当前文件中。C++
可以处理多个声明,但不能处理多个non-inline
定义。如果有的话,请确保只有内联类函数定义。
相关文章:
- 如何修复此错误:未定义对"距离(浮点数,浮点数,浮点数,浮点数,浮点数)"的引用
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 在没有定义返回类型的函数中返回布尔值,并将结果保存在无错误的char编译中-为什么
- 使用命名空间时出现多个定义错误
- C++错误C2600:无法定义编译器生成的特殊成员函数(必须首先在类中声明)
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 编写代码时C++出现错误:错误 1 错误 C2601:'circle':本地函数定义是非法的
- 在运算符重载定义中使用成员函数(const错误)
- 尝试调用 .h 文件中定义的变量时出现变量未定义错误
- 在C++中使用内联方法时出现未定义的符号错误
- 已定义函数时出现 G++ "未定义的引用"错误
- C++ G++ 编译器 - 错误:隐式声明的定义
- 链接 cmake 时出现未定义的引用错误
- 在头文件和 cpp 文件中使用一次 #pragma 时出现结构重定义错误
- 错误:未定义对'oboe::AudioStreamBuilder::openStream(oboe::AudioStream**)'的引用
- 链接阶段出现多重定义错误
- 已经以性格错误定义了
- vim ctag导致了对乐趣的错误定义
- C++ 隐式声明的编译器错误定义
- 编译器错误-定义问题.C++