解决的符号麻烦
问题描述:
我有以下的项目文件:解决的符号麻烦
//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 FileManager
和struct FileManager
...任何理由使用相同的名称?
答
我固定它通过声明函数的命名空间中:
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功能不命名空间中的文件管理器,但在全局命名空间。
mmm我没有任何叫FileManager的结构只有一个名为“ConnectFile”的文件管理器名称空间的一部分...我也没有得到它关于定义一个免费函数:/ – ffenix 2012-07-19 08:53:35
@ user1175832尝试重现ideone问题。 – 2012-07-19 08:55:12