多重定义错误

Multiple definition error

本文关键字:错误 定义      更新时间:2023-10-16

我有一个类文件: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定义。如果有的话,请确保只有内联类函数定义。