简单的.h文件麻烦

时间:2014-03-10 01:38:08

标签: c++ header makefile

我有一个简单的简单.h文件

#ifndef _HEAD
#define _HEAD

void GetNextMove(char playerSymbol, int &row, int &col);

#endif

包含在带有#include "head.h"的.cpp文件中,该文件包含在另一个带有#include "file.cpp"的.cpp文件中。我一直收到错误

/tmp/ccfN3b2g.o:Proj1Aux.cpp:(.text+0x0): multiple definition of `GetNextMove(char, int&, int&)'
/tmp/ccDzQLIi.o:Proj1.cpp:(.text+0x0): first defined here
collect2: error: ld returned 1 exit status

有谁知道会导致什么?我以为#infdef...会停止重复。

2 个答案:

答案 0 :(得分:0)

在另一个.cpp文件中包含一个.cpp文件是一种非常先进的技术,在您彻底了解#include的正常使用之前,最好避免这种技术。目前仅包含头文件。如果在另一个文件中声明的函数没有看到原型时出现错误,请将其放在.cpp个文件中包含的头文件中。

答案 1 :(得分:0)

  • 所以你的包含结构如下所示。

head.h ---------> file.cpp --------------> xxxxx.cpp

  • 所以我猜file.cppGetNextMove函数的实现。
  • 然后xxxxx.cpp不区分函数的声明和定义。
  • 它将声明(head.h)和定义(file.cpp)视为定义,并向您显示此错误。

作为解决方案:

  • 不要包含*.cpp个文件。
  • 尝试仅在标题(*.h)文件中保留函数声明。