未解决的外部符号,无法弄清楚原因

时间:2013-05-13 13:16:20

标签: c++ object inheritance linker unresolved-external

我有两个文件让我感到非常悲痛:camAVTEx.hcamAVTEx.cpp。以下是两个文件的常规设置:


//.h////////////////////////////////////////////////

/*
#includes to some other files
*/

class camera_avtcam_ex_t : public camera_t
{
public:
    camera_avtcam_ex_t();
    virtual ~camera_avtcam_ex_t();

private:
    //some members

public:
    //some methods

};

void GlobalShutdownVimbaSystem();

//.cpp/////////////////////////////////////////////

#include "StdAfx.h"
#include "camAVTEx.h"

//some other #includes

camera_avtcam_ex_t::camera_avtcam_ex_t()
{
}

//rest of the class' functions

void GlobalShutdownVimbaSystem()
{
    //implememtation
}

然后,在另一个目录中的文件中,我对#h文件的确切位置进行#include并尝试使用该类:


//otherfile.cpp

#include "..\..\src\HardSupport\Camera.h"
//this is the base camera class (camera_t)

#include "..\..\src\HardControl\camAVTEx.h" 
//this is indeed where both the .h and .cpp files are located

void InitCam
{
    camera_t* maincam = new camera_avtcam_ex_t();
}

void OnExit()
{
    GlobalShutdownVimbaSystem();
}

编译时,我收到以下错误:

  

8> otherfile.obj:错误LNK2001:未解析的外部符号“public:__ cdecl      camera_avtcam_ex_t :: camera_avtcam_ex_t(void)“(?? 0camera_avtcam_ex_t @@ QEAA @ XZ)

     

8> otherfile.obj:错误LNK2001:未解析的外部符号“void __cdecl      GlobalShutdownVimbaSystem(void)“(?GlobalShutdownVimbaSystem @@ YAXXZ)

     

8> .... \ bin \ x64 \ Release \ otherfile.exe:致命错误LNK1120:2个未解析的外部

我不能为我的生活弄清楚为什么它找不到这两个函数的实现。

所以我想我的问题很明显:为什么我会收到这些错误,需要修改哪些才能修复它们?

1 个答案:

答案 0 :(得分:0)

无论你如何看待它,你所犯的错误:unresolved external symbol "public: __cdecl camera_avtcam_ex_t::camera_avtcam_ex_t(void)" (??0camera_avtcam_ex_t@@QEAA@XZ)意味着编译器知道符号camera_avtcam_ex_t::camera_avtcam_ex_(这是类构造函数),因为他在camAVTEx.h中看到了它的声明文件但halas,它无法找到(= resolve)执行此符号(简而言之,代码)。

这通常是由于几种可能的原因而发生的:

  • 您没有告诉编译器您尝试使用的代码(.cpp),所以他不知道。尝试将文件添加到项目中。
  • 您编译丢失的代码,但不要与它链接。检查您是否没有两个独立的项目,或者尝试将lib添加到项目中(如果它来自lib。
  • 在某种程度上,编译后的代码与其定义不匹配(在混合使用C和C ++或搞乱命名空间时发生)检查您是否没有声明自相矛盾的封闭命名空间。
  • (也许是我不知道的其他原因?)