我目前正在使用 wxWidgets 项目,我必须将 wxString 复制到一个静态c字符串,该字符串可以保存程序生命周期的值。基本上我的头文件和源文件看起来像这样:
*****************PortDialog.h*****************
...
static char *portName;
-----------------------end
和源文件是;
***************PortDialog.cpp*****************
.
.
.
wxString str = "COM1";
strcpy(portName, (const char*)str.mbc_str());
---------------------end
但是我遇到了以下链接错误。
error LNK2001: unresolved external symbol "public: static char * portDialog::eportName" (?portName@portDialog@@2PADA)
有人可以向我解释我在这里犯的错误是什么吗?将static char *
用于上述目的是否正确?
答案 0 :(得分:0)
标头中声明的静态变量应该在cpp文件中初始化,参见http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Fcplr038.htm
答案 1 :(得分:0)
除了您收到的关于链接器错误的解释之外,您还应该知道您不能将目标作为strcpy
的{{1}}调用,而char *
尚未分配内存来保存源字符串。它会编译(和链接)但在运行时可以做任何事情。
答案 2 :(得分:0)
静态变量应该在cpp文件中声明
char* PortDialog::PortName = NULL;
就像使用Scope Resolution Operator
访问类的方法(函数)一样void PortDialog::SomeFunction()
{
//Code Goes here
}