[解決済み】エラー。ISO C++は非恒等式静的メンバのクラス内初期化を禁じている
2022-02-14 16:13:02
質問
これはヘッダーファイルであるemployee.h
#ifndef EMPLOYEE_H
#define EMPLOYEE_H
#include <iostream>
#include <string>
using namespace std;
class Employee {
public:
Employee(const string &first, const string &last)
オーバーロードされたコンストラクタ
: firstName(first),
firstName オーバーロードされたコンストラクタ
lastName(last)
lastName オーバーロードされたコンストラクタ
{ //The constructor start
++counter;
は、作成された各オブジェクトにつき、1つのプラスを追加します。
cout << "Employee constructor for " << firstName
<< ' ' << lastName << " called." << endl;
}
~Employee() {
デストラクタ cout << "~Employee() called for " << firstName << ' ' << lastName << endl;
各オブジェクトの姓と名を返します。
--counter;
カウンタマイナス1
}
string getFirstName() const {
return firstName;
}
string getLastName() const {
return lastName;
}
static int getCount() {
return counter;
}
private:
string firstName;
string lastName;
static int counter = 0;
ここで、エラーが発生しました。でも、どうして?
};
主なプログラム:employee2.cpp
#include <iostream>
#include "employee2.h"
using namespace std;
int main()
{
cout << "Number of employees before instantiation of any objects is "
<< Employee::getCount() << endl;
ここでは、クラスからteカウンタの値を呼び出しています。
{
新しいスコープブロックを開始する
Employee e1("Susan", "Bkaer");
Employee クラスの e1 オブジェクトを初期化します。
Employee e2("Robert", "Jones");
Employee クラスの e2 オブジェクトを初期化します。
cout << "Number of employees after objects are instantiated is"
<< Employee::getCount();
cout << "\n\nEmployee 1: " << e1.getFirstName() << " " << e1.getLastName()
<< "\nEmployee 2: " << e2.getFirstName() << " " << e2.getLastName()
<< "\n\n";
}
スコープブロックの終了
cout << "\nNUmber of employees after objects are deleted is "
<< Employee::getCount() << endl; //shows the counter's value
} //End of Main
何が問題なのでしょうか? 何が問題なのか、さっぱりわからない。 いろいろ考えてみたのですが、何が問題なのかわかりません。
解決方法は?
その
初期化
静的メンバの
counter
はヘッダーファイル内に存在してはならない。
ヘッダーファイルの行を次のように変更します。
static int counter;
そして、以下の行を employee.cpp に追加してください。
int Employee::counter = 0;
理由は、このような初期化をヘッダーファイルに入れると、ヘッダーが含まれるすべての場所で初期化コードが重複してしまうからです。
関連
-
[解決済み] エラー: '...'のメンバー '...'が非クラス型である場合のリクエスト
-
[解決済み] 非常に基本的なC++プログラムの問題 - バイナリ式への無効なオペランド
-
[解決済み】c++でstd::vectorを返すための効率的な方法
-
[解決済み] gdbを使用してもデバッグシンボルが見つからない
-
[解決済み] Pythonで静的なクラス変数は可能ですか?
-
[解決済み] 静的クラスとシングルトンパターンの違い?
-
[解決済み] 既存の静的クラスに拡張メソッドを追加することはできますか?
-
[解決済み】静的定数文字列(クラスメンバ)
-
[解決済み】静的初期化コードブロックと非静的初期化コードブロックの違いは何ですか?
-
[解決済み] クラステンプレートでの静的メンバ初期化
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】ファイルから整数を読み込んで配列に格納する C++ 【クローズド
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み】システムが指定されたファイルを見つけられませんでした。
-
[解決済み】C++ - 適切なデフォルトコンストラクタがない [重複]。
-
[解決済み】Enterキーを押して続行する
-
[解決済み】VC++の致命的なエラーLNK1168:書き込みのためにfilename.exeを開くことができません。
-
[解決済み】Eclipse IDEでC++エラー「nullptrはこのスコープで宣言されていません」が発生する件
-
[解決済み] スタックアロケーションにより初期化されていない値が作成された
-
[解決済み] コンストラクタでない静的メンバや静的配列をクラスで初期化できないのはなぜですか?