在头文件中声明一个静态类成员

时间:2012-09-24 19:07:20

标签: c++ mfc

我正在研究一个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 ); 

}

1 个答案:

答案 0 :(得分:3)

乍一看有几种可能性;

  • 你的动作代码文件中是否#include“Shared_Variable.h”?
  • 是否在命名空间中声明了comp,是否需要限定它,或者在命名空间中添加using声明?
  • 什么是CString?我不认为这是一种C ++类型。
  • 如果错误消息有效,则表明它正在尝试将'comp'解释为保留字。您是否启用了VC特定的编译器扩展(或者未能禁用与该关键字竞争的扩展)?或者,您是否忘记了类定义上方的分号或其他表达式终止符?

此外,在标题内的类中声明静态成员要求您具有单个.cpp文件,该文件定义该成员的单个实例。所以你可以在标题中声明它:

static CString myValue;

但你必须在Shared_Variable.cpp中执行此操作:

CString comp::myValue;

如果没有这个,你已经定义了一个静态变量,但没有告诉C ++将它粘贴在内存中的位置。由于头文件是作为(可能)多个CPP文件的依赖项引入的,因此您必须确保将任何静态内容固定到一个CPP文件上,这就是上面的代码片段。

制作简单静态变量的另一种方法是在头文件中声明:

extern CString myValue;

并且在相应的CPP文件中(任何CPP文件,实际上,它在技术上甚至不必包含头文件,尽管这是个好主意):

CString myValue;

有没有帮助?