2013-03-28 81 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

相关问题