2012-07-19 74 views
0

我有以下的項目文件:解決的符號麻煩

//connections.cpp 

#include "stdafx.h" 
#include "LibraryHeaders.h" 
#include "FileManager.h" 

#define WSAVersion 0x202 
#define GSMsgID 0x100 

extern HWND Main_hWnd; 

bool InitConnections() 
{ 
    FileManager::ConnectFile *connectfile = FileManager::ReadConnectFile(connectfile); 
    SockBase GSConnection(WSAVersion, TCP, connectfile->GS_IP, connectfile->GS_Port, Main_hWnd, GSMsgID); 
    if (GSConnection.Connect() != true) {return false;} 
    return true; 
} 

//FileManager.cpp 
#include "stdafx.h" 
#include "FileManager.h" 
#include "LibraryHeaders.h" 

using namespace FileManager; 

ConnectFile* ReadConnectFile(ConnectFile *ConnectStruct) 
{ 
    FileLibrary connectfile("DMOConnection.cfg"); 
    if (connectfile.OpenFile(HEAP, OPEN_EXISTING, FILE_ATTRIBUTE_ARCHIVE, PAGE_READWRITE) != true) {return false;} 
    ConnectStruct->GS_IP = connectfile.parser->str_GetToken((char*)connectfile.FileBuff); 
    if (ConnectStruct->GS_IP == (const char*) -1) {return false;} 
    ConnectStruct->GS_Port = connectfile.parser->int_GetToken((char*)connectfile.FileBuff); 
    if (ConnectStruct->GS_Port == -1) {return false;} 
    return ConnectStruct; 
} 

//FileManager.h 
namespace FileManager 
{ 
    struct ConnectFile 
    { 
     const char* GS_IP; 
     unsigned int GS_Port; 
    }; 

    ConnectFile* ReadConnectFile(ConnectFile*); 
} 

,並試圖打造的項目中,我得到這個錯誤時:

Connections.obj : error LNK2019: unresolved external symbol "struct FileManager::ConnectFile * __cdecl FileManager::ReadConnectFile(struct FileManager::ConnectFile *)" ([email protected]@@[email protected]@[email protected]@Z) referenced in function "bool __cdecl InitConnections(void)" ([email protected]@YA_NXZ) 

我不明白爲什麼,鏈接器應該擡頭看到該文件FileManager.cpp定義FileManager :: ReadConnectFile但它沒有,任何提示如何解決這個問題?

回答

1

你定義一個免費功能:

ConnectFile* ReadConnectFile(ConnectFile *ConnectStruct) 

不是會員:

ConnectFile* FileManager::ReadConnectFile(ConnectFile *ConnectStruct) 

完全不同。

另外:

using namespace FileManager; 

error LNK2019: unresolved external symbol "struct FileManager::ConnectFile [...]

意味着你有一個namespace FileManagerstruct FileManager ...任何理由使用相同的名稱?

+0

mmm我沒有任何叫FileManager的結構只有一個名爲「ConnectFile」的文件管理器名稱空間的一部分...我也沒有得到它關於定義一個免費函數:/ – ffenix 2012-07-19 08:53:35

+0

@ user1175832嘗試重現ideone問題。 – 2012-07-19 08:55:12

0

我固定它通過聲明函數的命名空間中:

namespace FileManager 
{ 
    struct ConnectFile 
    { 
     const char* GS_IP; 
     unsigned int GS_Port; 
    }; 
} 

using namespace FileManager; 
ConnectFile* ReadConnectFile(ConnectFile *ConnectStruct); 

的IDE是VC11 Beta版,感謝您的答案。

0

代碼

using namespace FileManager;
ConnectFile* ReadConnectFile(ConnectFile *ConnectStruct)
{ ...some definition...}

定義ReadConnectFile功能命名空間中的文件管理器,但在全局命名空間。