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 *)" (?ReadConnectFile@FileManager@@YAPAUConnectFile@1@PAU21@@Z) referenced in function "bool __cdecl InitConnections(void)" (?InitConnections@@YA_NXZ)

理由がわかりません。リンカーが検索して、FileManager::ReadConnectFile で FileManager.cpp を定義していることを確認する必要がありますが、そうではありません。これを修正する方法はありますか?

4

3 に答える 3

1

フリー関数を定義しています:

ConnectFile* ReadConnectFile(ConnectFile *ConnectStruct)

メンバーではない:

ConnectFile* FileManager::ReadConnectFile(ConnectFile *ConnectStruct)

全く違います。

また:

using namespace FileManager;

エラー LNK2019: 未解決の外部シンボル "struct FileManager::ConnectFile [...]

anamespace FileManagerと a struct FileManager... 同じ名前を使用する理由はありますか?

于 2012-07-19T08:42:18.027 に答える
0

名前空間から関数を宣言することで修正しました:

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

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

IDE は VC11 Beta です。回答ありがとうございます。

于 2012-07-19T09:01:05.617 に答える
0

コード

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

名前空間 FileManager ではなく、グローバル名前空間でReadConnectFile 関数を定義します。

于 2012-07-19T12:03:13.640 に答える