[解決済み] クラス内のconstメンバ変数を初期化するには?
2022-07-02 01:28:56
質問
#include <iostream>
using namespace std;
class T1
{
const int t = 100;
public:
T1()
{
cout << "T1 constructor: " << t << endl;
}
};
constメンバ変数を初期化しようとすると
t
を100で初期化しようとしています。しかし、それは私に次のエラーを与えています。
test.cpp:21: error: ISO C++ forbids initialization of member ‘t’
test.cpp:21: error: making ‘t’ static
を初期化するにはどうすればよいのでしょうか?
const
の値を初期化することができますか?
どのように解決するのですか?
この
const
変数は、変数が変更可能かどうかを指定します。割り当てられた定数は、その変数が参照されるたびに使用されます。割り当てられた値は、プログラムの実行中に変更することはできません。
Bjarne Stroustrupの 説明 が簡潔にまとめています。
クラスは通常ヘッダーファイルで宣言され、ヘッダーファイルは通常多くの翻訳ユニットに含まれます。しかし、複雑なリンカー ルールを避けるために、C++ はすべてのオブジェクトが一意の定義を持つことを要求しています。C++ がオブジェクトとしてメモリに格納する必要のあるエンティティのクラス内定義を許可した場合、そのルールは破られることになります。
A
const
変数はクラス内で宣言されなければなりませんが、その中で定義することはできません。クラスの外でconst変数を定義する必要があります。
T1() : t( 100 ){}
ここでは、割り当てられた
t = 100
の代入は、クラスの初期化が行われるよりずっと前に、イニシャライザー・リストの中で行われます。
関連
-
[解決済み】C++ 式はポインタからオブジェクトへの型を持っている必要があります。
-
[解決済み】リンカーエラーです。"リンカ入力ファイルはリンクが行われていないため未使用"、そのファイル内の関数への未定義参照
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された
-
[解決済み] std::string を const char* または char* に変換する方法
-
[解決済み] 文字列の単語を反復処理するにはどうすればよいですか?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] C#のconstとreadonlyの違いは何ですか?
-
[解決済み] Static readonly」対「const」。
-
[解決済み] constexpr` と `const` の相違点
-
[解決済み】静的定数文字列(クラスメンバ)
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】クラステンプレートの引数リストがない
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み】致命的なエラー LNK1169: ゲームプログラミングで1つ以上の多重定義されたシンボルが発見された
-
[解決済み】C++でランダムな2倍数を生成する
-
[解決済み] error: 'if' の前に unqualified-id を期待した。
-
[解決済み】関数名の前に期待されるイニシャライザー
-
[解決済み】C++の余分な資格エラー
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された