0

MFCアプリケーションで作業しています。アプリケーション内のすべてのアクション間で共有されるグローバル文字列変数を作成したいのですが、ヘッダーファイル内に静的文字列変数を作成しましたが、アクションの1つ内でアクセスしようとするとこのコンパイラエラーが発生します:

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

そして、私は次のように私のアクションの1つでそれを使用しました:

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

一見したところいくつかの可能性。

  • アクションコードファイルに「Shared_Variable.h」を#includeしましたか?
  • compは名前空間で宣言されていますか?それを修飾する必要がありますか、それとも名前空間にusing宣言を追加する必要がありますか?
  • CStringとは何ですか?これをC++タイプとして認識していません。
  • エラーメッセージが有効な場合は、「comp」を予約語として解釈しようとしていることを示しています。VC固有のコンパイラ拡張機能を有効にしましたか(またはそのキーワードと競合するものを無効にできませんでしたか)?または、クラス定義の上にあるセミコロンまたはその他の式ターミネータを忘れましたか?

さらに、そのようなヘッダー内のクラス内で静的メンバーを宣言するには、そのメンバーの単一のインスタンスを定義する単一の.cppファイルが必要です。したがって、ヘッダーで次のように宣言できます。

static CString myValue;

ただし、Shared_Variable.cpp内でこれを行う必要があります。

CString comp::myValue;

これがないと、静的変数を定義しましたが、メモリ内のどこに固定するかをC++に指示していません。ヘッダーファイルは(潜在的に)複数のCPPファイルへの依存関係としてプルされるため、静的なものはすべて1つのCPPファイルに固定されていることを常に確認する必要があります。これが上記のコードスニペットの内容です。

単純な静的変数を作成する別の方法は、ヘッダーファイルで宣言することです。

extern CString myValue;

対応するCPPファイル(実際には、どのCPPファイルでも、技術的にはヘッダーファイルをインクルードする必要はありませんが、それは良い考えです):

CString myValue;

そのいずれかが役立ちますか?

于 2012-09-24T19:46:47.350 に答える