将定义放入CPP文件时未解析的外部符号

时间:2016-07-10 18:51:27

标签: c++

对于我的生活,我无法弄清楚导致这种情况的原因......我一直得到未解决的外部符号错误。但是,如果我在头文件中放置一个空的定义,它会正确编译。

WINMAIN.CPP

#include "FILE_XXX.H"

int WINMAIN WinMain(...)
{
   EnableOpenTest(); // call like this
   return 0;
}

FILE_WORKS_CORRECTLY.H

#ifndef _FILE_WORKS_CORRECTLY_
#define _FILE_WORKS_CORRECTLY_

void EnableOpenTest() { }

#endif

然而,当我做这样的事情(正确)时,它不起作用,我得到一个编译时错误。

FILE_DOES_NOT_WORK_CORRECTLY.H

#ifndef _FILE_DOES_NOT_WORK_CORRECTLY_
#define _FILE_DOES_NOT_WORK_CORRECTLY_

void EnableOpenTest();

#endif

FILE_DOES_NOT_WORK_CORRECTLY.CPP

#include "FILE_DOES_NOT_WORK_CORRECTLY.H"

void EnableOpenTest() { /* do work here */ }

更新: 经过进一步调查,我发现问题与我在同一解决方案中有多个项目有关。然后我尝试从另一个项目中引用一个项目中的函数。显然我做错了。

3 个答案:

答案 0 :(得分:0)

我看到的唯一错误是在cpp文件中你还需要包含返回类型。它应该是

void EnableOpenTest()
{
    //Enter Code Here
}

答案 1 :(得分:0)

FILE_DOES_NOT_WORK_CORRECTLY.CPP内部:

EnableOpenTest(){ /* do work here */ }

必须是

void EnableOpenTest(){ /* do work here */ }

看起来您的编译器将缺少的返回类型设置为int,而不是通过错误消息向您大喊大叫。

你应该打开编译器警告,它会让你很快发现这些错误。

此外,在FILE_WORKS_CORRECTLY.H内你还有另一个错误:

void EnableOpenTest() { }

必须是

inline void EnableOpenTest() { }

否则,如果此标头包含两次(即多于一个.cpp文件),则会触发错误消息。

答案 2 :(得分:0)

解决了!

  1. 其他项目需要是静态库(主项目.exe)
  2. 将库项目的参考添加到主项目
  3. 显然文件结构导致了很多这些问题。