[解決済み] C++のクラスで静的変数を初期化する?
2023-02-10 02:58:20
質問
あるクラスの関数が、実はオブジェクトにアクセスしていないことに気がつきましたので、それらを
static
. するとコンパイラは、それらがアクセスするすべての変数も静的でなければならないと教えてくれました - まあ、ここまではかなり理解できます。私は以下のような文字列変数をたくさん持っています。
string RE_ANY = "([^\\n]*)";
string RE_ANY_RELUCTANT = "([^\\n]*?)";
といった具合にクラス分けしています。その後、それらをすべて
static const
にしています。しかし、私のプログラムは、それらをクラスから移動させた場合のみコンパイルされます。そうしないと、MSVC++2010 は "静的定数積分変数のみがクラス内で初期化される可能性があります" と警告します。
それは残念です。回避策はあるのでしょうか。私は、それらを所属するクラス内に残しておきたいと思います。
どのように解決するのですか?
クラス内部で初期化することはできませんが、クラス外部のソースファイルで初期化することができます。
// inside the class
class Thing {
static string RE_ANY;
static string RE_ANY_RELUCTANT;
};
// in the source file
string Thing::RE_ANY = "([^\\n]*)";
string Thing::RE_ANY_RELUCTANT = "([^\\n]*?)";
更新
質問の最初の行に気づきました - あなたは
don't
は、これらの関数を
static
を作りたいのであれば
const
. それらを作る
static
にすることは、それらがもはやオブジェクトと関連付けられていないことを意味します(したがって、それらは非静的なメンバーにアクセスすることができません)、そしてデータを静的にすることは、それがこのタイプのすべてのオブジェクトで共有されることを意味します。これは、あなたが望むものではない可能性があります。それらを
const
にすることは、どのようなメンバーも変更できないが、アクセスは可能であることを意味します。
関連
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] 静的クラスとシングルトンパターンの違い?
-
[解決済み] HashMapを直接(リテラルに)初期化する方法は?
-
[解決済み] C言語における「static」の意味とは?
-
[解決済み] JavaScriptの静的変数
-
[解決済み] Pythonの関数内の静的変数に相当するものは何ですか?
-
[解決済み] 静的変数が悪とされるのはなぜですか?
-
[解決済み] C++で静的プライベートメンバを初期化する方法は?
-
[解決済み】静的なMapを初期化する方法は?
-
[解決済み] C++の静的コンストラクタ?プライベートな静的オブジェクトを初期化する必要があります
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] string does not name a type Errorが発生するのはなぜですか?
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み】「Expected '(' for function-style cast or type construction」エラーの意味とは?
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み】Enterキーを押して続行する
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較
-
[解決済み] クラステンプレートでの静的メンバ初期化
-
[解決済み] コンストラクタでない静的メンバや静的配列をクラスで初期化できないのはなぜですか?