2017-04-03 9 views
-1

私はこの宣言を持っている未解決の外部シンボル "パブリック静的構造体は、" my.hファイルで

int wmain(int argc, WCHAR* argv[]) 
{ 

    struct XMLReader::data; 

    wmemcpy(XMLReader::data.Log, L"mama", 50); 
    wmemcpy(XMLReader::data.Pass, L"am0r3", 50); 
    wmemcpy(XMLReader::data.CPULimit, L"am0r3", 50); 
    wmemcpy(XMLReader::data.Mail, L"am0r3", 50); 
    wmemcpy(XMLReader::data.NumProcess, L"am0r3", 50); 
    wmemcpy(XMLReader::data.memLimit, L"am0r3", 50); 

しかし、私はまだVS2013のエラーLNK2001:エラー3エラーLNK2001:未解決の外部シンボル "public:静的構造体XMLReader :: data XMLReader :: data"(?data @ XMLReader @@ 2U01 @ A)C:\ Users \ Documents \ Visual Studio 2013 \ Projects \ xmlLiteExample \ C++ \ XmlLiteReader.obj xmllitereaderTask および

エラー4エラーLNK1120:1つの未解決の外部C:プロジェクト\ xmlLiteExample \ C++ \デバッグ\ xmllitereaderTask.exe xmllitereaderTask \ Visual Studioの2013 \ドキュメント\ \ユーザー

提案?

+0

「public」のように見えますが、「static」はコードのどこかに間違って綴られています。 –

+0

どこ?おそらくタイトルに – kenhero

+0

@kenhero _unresolved外部シンボル "** punlic **:** stati **構造体XMLReader :: data on .obj_ – erip

答えて

1

そして、私の.cppファイルに私はあなたがいないデータ構造体

を定義し、inizializedています。

struct XMLReader::data; 

これは、タイプstruct XMLReader::data;の再宣言ではなく、静的クラスメンバの定義です。このような再宣言は効果がありません。

XMLReader::datastruct)は、静的データメンバのです。これは、です。あなたが関数内で定義することはできませんタイプと名前の両方でそれを定義する必要があり、そして、あなたはファイルレベルでそれをしなければならない。

struct XMLReader::data XMLReader::data; 

名前としてdataを使用することは推奨されません可変タグと構造タグの両方に適用されます。実際には、何かの名前としてdataを使用することは推奨されません。それはどんな情報も提供しません。もちろん、structタグと変数の両方の名前として何も使用しないでください。これは混乱しており、あいまいなC機能との互換性しか許されていません。あなたが別のものにこれらの事を変更する場合は、このような何かを行うことができます。唯一のあなたは未定義の振る舞いを呼び出す場合は、動的にメンバを初期化するためにあなたの試みよりも好ましい

XMLReader::options_t XMLReader::options = { 
     L"mama", 
     L"am0r3", 
     L"am0r3", 
     L"am0r3", 
     L"am0r3" 
     L"am0r3" 
}; 

は(あなたはリテラル文字列から50個の文字をコピーすることはできませんそれは5つしかありません)。

最後に、文字配列を使用しないでください。 std::stringを使用してください。 Visual Studioで標準に準拠していないワイド文字を使用する必要がある場合は、std::wstringを使用してください。

関連する問題