2013-03-28 92 views
0

這是我一直在得到的錯誤,我一直在試圖找出如何解決它,但失敗了。我在問是否有人能指引我走向正確的方向。爲什麼我會收到此錯誤? 「無法解析的外部符號」

WorldServer fatal error LNK1120: 2 unresolved externals 
WorldServer error LNK2019: unresolved external symbol "public: class CItemElem * __thiscall CLinkedItemMgr::GetLinkedItem(unsigned long)" ([email protected]@@[email protected]@[email protected]) referenced in function "private: void __thiscall CDPSrvr::OnLinkedItem(class CAr &,unsigned long,unsigned long,unsigned char *,unsigned long)" ([email protected]@@[email protected]@[email protected]) 
WorldServer error LNK2019: unresolved external symbol "public: int __thiscall CLinkedItemMgr::AddLinkedItem(class CItemElem *)" ([email protected]@@[email protected]@@Z) referenced in function "private: void __thiscall CDPSrvr::OnLinkedItem(class CAr &,unsigned long,unsigned long,unsigned char *,unsigned long)" ([email protected]@@[email protected]@[email protected]) 

這是.H

#ifndef __ITEM_LINK__H 
#define __ITEM_LINK__H 
class CLinkedItemMgr 
{ 
private: 
    CLinkedItemMgr(){ m_dwLinkedItemCount = 0;}; 
    ~CLinkedItemMgr(){}; 
    DWORD m_dwLinkedItemCount; 
public: 
    map<DWORD,CItemElem*> m_mapLinkedItems; 

    static CLinkedItemMgr *GetInstance() 
    { 
     static CLinkedItemMgr instance; 
     return &instance; 
    } 
    int AddLinkedItem(CItemElem *pItem); 
    CItemElem *GetLinkedItem(DWORD dwIndex); 
}; 
#endif 

這是在.cpp

#include "stdafx.h" 
#include "ItemLink.h" 
int CLinkedItemMgr::AddLinkedItem(CItemElem *pItem) 
{ 
    if(!pItem) 
     return 0; 
    m_mapLinkedItems.insert(make_pair<DWORD,CItemElem*>(++m_dwLinkedItemCount,pItem)); 
    return m_dwLinkedItemCount; 
} 
CItemElem *CLinkedItemMgr::GetLinkedItem(DWORD dwIndex) 
{ 
    map<DWORD,CItemElem*>::iterator it = m_mapLinkedItems.find(dwIndex); 
    if(it == m_mapLinkedItems.end()) 
     return FALSE; 
    return it->second; 
} 
+0

你在哪裏定義'AddLinkedItem'? –

+3

你包括警衛是保留的標識符:http://stackoverflow.com/questions/228783/what-are-the-rules-about-using-an-underscore-in-ac-identifier – chris

回答

3

你的問題是在這裏CPP。

#ifdef __ITEM_LINK 
#include "ItemLink.h" 

#ifdef __ITEM_LINK手段「僅處理下面的代碼,如果__ITEM_LINK定義」

而在你的情況下,沒有定義。它僅在包含"ItemLink.h"時才被定義,並且只有在已經定義了"ItemLink.h"時纔會被包含。你已經阻止了先發生。

取出#ifdef線。

+0

我已經添加了的.cpp作爲以及 – user2205389

+0

好吧謝謝你,我現在會測試它。 – user2205389

+0

我刪除了ifdef行,但似乎我仍然得到相同的錯誤。 – user2205389

0

它看起來像一個鏈接問題。 編譯器知道你的類有一個名爲GetLinkedItem的函數,但是無法在任何地方找到該函數的任何定義。編譯可執行文件時鏈接是否正確? 我敢打賭,在鏈接之前停止編譯器不會觸發任何錯誤。 (例如,g ++ -c ItemLink.cpp)。

我要去問別人誰是習慣了Visual Studio中闡述更多的幫助:d 無論如何,編譯需要三個主要步驟: 1)將預處理指令,解析的源代碼,尋找語法錯誤和類似 2)創建從源代碼鏈接的所有目標文件使您的項目在一個可執行的目標文件(一些源代碼和可執行之間的中途) 3)

你的編譯鏈未能在第三步。 編譯器希望在某些.cpp中定義某個函數(它已成爲編譯鏈第2步的對象文件),但無法在任何地方找到它。

,並不能找到它,因爲在.cpp文件,它告訴預處理器不包括您的定義是#ifdef來的,因爲__ITEM_LINK沒有定義

我看到你在改變了的.cpp您順便問一下

+0

通過停止編譯器向我介紹您的意思嗎?我正在使用Visual Studio 2003 – user2205389

+0

我在回答中闡述了更多內容,希望您會發現它有幫助 – blue

+0

好吧我會檢查是否錯過了定義ITEM_LINK的任何地方 – user2205389

相關問題