0

我正在开发一个 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 ); 

}
4

1 回答 1

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;

这些有帮助吗?

于 2012-09-24T19:46:47.350 回答