解决的符号麻烦

问题描述:

我有以下的项目文件:解决的符号麻烦

//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但它没有,任何提示如何解决这个问题?

你定义一个免费功能:

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

我固定它通过声明函数的命名空间中:

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

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

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

代码

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

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