我有一个类文件: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()'|
问题是什么?
答案 0 :(得分:2)
问题是在标题中保留非inline
定义。之一:
inline
。这可以通过两种方式实现:
inline void Grid::show() { .... }
inline
另外,使用包含警戒(虽然这会导致不同的错误)。
答案 1 :(得分:1)
您可能包含.cpp
文件而不是.h
。
您需要将.cpp
拆分为两个文件。只有.cpp
的一份副本和.h.
的所有副本(使用#include
)。
您的文件在传递给编译器之前已经过预处理。可以看到#include
只是将包含文件的内容直接复制到当前文件中。 C++
可以处理多个声明,但不能处理多个non-inline
定义。确保只有内联类函数定义(如果有)。