0

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

有什么问题?

4

2 回答 2

2

inline问题是在标题中保留非定义。任何一个:

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

此外,使用包含警卫(尽管这会导致不同的错误)。

于 2012-12-20T11:09:50.737 回答
1

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

您需要将您的.cpp分成两个文件。只拥有一份 的副本,.cpp并且拥有任意数量的副本.h.(使用#include)。

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

于 2012-12-20T11:11:15.467 回答