環境
- C++17
質問内容
静的メンバ変数を使う場合、どこかに定義を書く必要があると思いますが、ヘッダーファイルに書いた場合、異なる翻訳単位でそれぞれ include されてしまうと多重定義エラーになります。
例えば、以下のような静的クラスがあるとして、利用する側がヘッダーファイルを include するだけで使えるようにするには、静的メンバ変数 engine_
の定義はどのように書けばいいのでしょうか。
random.h
cpp
1#include <random> 2 3class Random 4{ 5 public: 6 // [0, 1] の一様分布に従う乱数を返す。 7 static double rand() 8 { 9 std::uniform_real_distribution<> dist(0.0, 1.0); 10 return dist(engine_); 11 } 12 13 static int rand(int start, int end) 14 { 15 std::uniform_int_distribution<> dist(start, end); 16 return dist(engine_); 17 } 18 private: 19 static std::mt19937 engine_; 20}; 21 22std::mt19937 Random::engine_(42); // ヘッダーに書くと異なる翻訳単位でそれぞれ include されると、多重定義エラーになる。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/20 04:24