読者です 読者をやめる 読者になる 読者になる

たぶん週刊「今週の進捗」

1週間に勉強したことや実装したことをネタに、週に1回(主に土日に)更新していく予定です。「多分」なので、臨時休刊があってもご海容ください。

プロつく計画1-4:3週目「クラス変数の導入」

今週も今週とて、クラス変数の導入です。

つまづいたところ

インスタンス毎に保持する必要のない変数をクラス変数にしようと、int型と同様に初期化しようとしたら、

Error: a member of type "const s3d::Font" cannot have an in-class initializer

と言われた。
どうやら、クラス定義内でstaticでない変数と同様に初期化できるstatic変数は、Integrated type(int型とか)のみに限られるそうだ。

stackoverflow.com

stackoverflow.com

つまづいたところ2

上と関連して。
ヘッダファイルにクラスの宣言を書くファイル分割方法で、
ヘッダファイルでstatic変数を初期化したら、このようなエラーが出る。

LNK2005 "private: static struct s3d::Color const Command::SELECTED_COLOR_"(? SELECTED_COLOR_@Command@@0UColor@s3d@@B) already defined in Block.obj

どうやら、ヘッダファイルを複数のソースファイルで読み込んでるから、何度も宣言し直してることになっているらしい。

stackoverflow.com


というわけで、対応するソースファイルでクラス変数を初期化。