多重定义错误

时间:2012-12-20 11:08:30

标签: c++ class

我有一个类文件: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()'|

问题是什么?

2 个答案:

答案 0 :(得分:2)

问题是在标题中保留非inline定义。之一:

  • 将定义移至实施文件
  • 让他们inline。这可以通过两种方式实现:
    • 明确标记:inline void Grid::show() { .... }
    • 移动类定义中的定义,它们将隐式inline

另外,使用包含警戒(虽然这会导致不同的错误)。

答案 1 :(得分:1)

您可能包含.cpp文件而不是.h

您需要将.cpp拆分为两个文件。只有.cpp的一份副本和.h.的所有副本(使用#include)。

您的文件在传递给编译器之前已经过预处理。可以看到#include只是将包含文件的内容直接复制到当前文件中。 C++可以处理多个声明,但不能处理多个non-inline定义。确保只有内联类函数定义(如果有)。