2013-05-13 79 views
0

我有兩個文件引起了我很多的難過: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 
} 

然後,在不同的目錄中的文件,我做的#include到的確切位置.h文件並嘗試使用該類:


//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:無法解析的外部符號 「公用:__cdecl camera_avtcam_ex_t :: camera_avtcam_ex_t(無效)」(?? 0camera_avtcam_ex_t @@ QEAA @XZ)

8> otherfile.obj:錯誤LNK2001:解析外部符號 「空隙__cdecl GlobalShutdownVimbaSystem(無效)」(GlobalShutdownVimbaSystem @@ YAXXZ)

8> .... \ BIN \ 64 \? Release \ otherfile.exe:致命錯誤LNK1120:2個未解決的外部事件

我不能爲了我的生活找出爲什麼它找不到這兩個函數的實現。

所以我想我的問題是相當明顯的:爲什麼我得到這些錯誤,我需要改變以解決它們?

+0

你確定該文件訪問在你的程序中包含的文件?這可能是你的文件無法找到那些包含/ – 2013-05-13 13:22:26

+0

相當明顯的可能性,但你確定'camAVTEx.cpp'已經編譯並且鏈接到你的'otherfile.cpp'文件嗎?你的構建系統是什麼? – Offirmo 2013-05-13 13:23:32

+0

@ Need4Sleep我不明白它是如何訪問的 – xcdemon05 2013-05-13 13:24:48

回答

0

你如何看待它,錯誤你有不管:unresolved external symbol "public: __cdecl camera_avtcam_ex_t::camera_avtcam_ex_t(void)" ([email protected]@[email protected])意味着編譯器知道符號camera_avtcam_ex_t::camera_avtcam_ex_(這是類的構造函數),因爲他看到了它在camAVTEx.h文件,但哈拉斯聲明,它無法找到(=解決)執行這個符號(簡而言之,代碼)。

這通常是因爲幾個可能的原因發生了:

  • 你沒有告訴代碼(的.cpp)編譯器嘗試使用,所以他不知道這一點。嘗試將文件添加到您的項目。
  • 您編譯缺少的代碼,但不要鏈接它。檢查你是否沒有兩個獨立的項目,或者嘗試將lib添加到項目中,如果它來自lib。
  • 以某種方式,編譯後的代碼與其定義不符(發生在混合使用C和C++或與命名空間混淆時)檢查是否未聲明矛盾的封裝命名空間。
  • (也許其他的原因,我不知道嗎?)
+0

我覺得我的問題可能是你的第二個要點。我對鏈接器設置不是很好,還有什麼想法可以在VS2010中做到這一點? – xcdemon05 2013-05-16 17:21:59