我正在研究一个MFC应用程序,我想创建一个全局字符串变量,以便在应用程序中的所有操作之间共享,我在头文件中创建了一个静态字符串变量,但当我尝试在一个文件中访问它时此编译器错误产生的操作:
error C3381: 'comp' : assembly access specifiers are only available in code compiled with a /clr option
这是我的头文件,里面是类:
//Shared_Variable.h
class comp
{
comp() { } // private default constructor
public:
static CString myValue;
};
我在其中一个操作中使用了它,如下所示:
void CCalculatorDlg::OnBnClickedButton1()
{
comp::myValue="1"; ----->accessing the static member of my class
LPCTSTR btn_title=_T("1");
SetDlgItemText(IDC_EDIT1,btn_title );
}
答案 0 :(得分:3)
乍一看有几种可能性;
此外,在标题内的类中声明静态成员要求您具有单个.cpp文件,该文件定义该成员的单个实例。所以你可以在标题中声明它:
static CString myValue;
但你必须在Shared_Variable.cpp中执行此操作:
CString comp::myValue;
如果没有这个,你已经定义了一个静态变量,但没有告诉C ++将它粘贴在内存中的位置。由于头文件是作为(可能)多个CPP文件的依赖项引入的,因此您必须确保将任何静态内容固定到一个CPP文件上,这就是上面的代码片段。
制作简单静态变量的另一种方法是在头文件中声明:
extern CString myValue;
并且在相应的CPP文件中(任何CPP文件,实际上,它在技术上甚至不必包含头文件,尽管这是个好主意):
CString myValue;
有没有帮助?