未解决的外部符号"公共静态结构"

时间:2017-04-03 18:39:04

标签: c++ visual-studio-2013 struct

在my.h文件中,我有这个声明:

/**
*  XMLReader Class
*
*  Defines the required function to parse and get data from XML File
**/
class XMLReader {
public:


    XMLReader();
    ~XMLReader();

    static BOOL  XmlFinder(WCHAR* argv, const WCHAR* log,const WCHAR* Pass);
    /**
    *  Get the data from the XML Files
    *
    *  Returns Boolean if find it
    */

static  struct data
    {
        WCHAR NumProcess[100];
        WCHAR Log[100];
        WCHAR Pass[100];
        WCHAR Mail[100];
        WCHAR memLimit[100];
        WCHAR CPULimit[100];

    }data;


};

在我的.cpp文件中,我已经定义并使用了inizialized数据结构:

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:static struct XMLReader :: data XMLReader :: data" (?data @ XMLReader @@ 2U01 @ A)C:\ Users \ Documents \ Visual Studio 2013 \ Projects \ xmlLiteExample \ C ++ \ XmlLiteReader.obj xmllitereaderTask 和

错误4错误LNK1120:1个未解析的外部C:\ Users \ Documents \ Visual Studio 2013 \ Projects \ xmlLiteExample \ C ++ \ Debug \ xmllitereaderTask.exe xmllitereaderTask

建议?

1 个答案:

答案 0 :(得分:1)

  

在我的.cpp文件中,我已经定义并初始化了数据结构

你还没有。

struct XMLReader::data;

这是类型 struct XMLReader::data;的重新声明,而不是静态类成员的定义。这种重新声明没有效果。

XMLReader::data(无struct)是静态数据成员的名称。您需要使用类型和名称来定义它,并且您无法在函数中定义,您必须在文件级别执行

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"
};

这比您尝试动态初始化成员更受欢迎,只有您自己调用未定义的行为(您不能从只有5的字符串文字中复制50个字符)。

最后但并非最不重要的是,不要使用字符数组。使用std::string。如果必须使用(在Visual Studio中不符合标准的)宽字符,请使用std::wstring