重複の可能性:
C++静的定数文字列(クラスメンバー)
初期化された静的const C++クラスメンバーは、リンク時に重複シンボルエラーを示します
C++での私の経験は、文字列クラスの追加よりも前から存在していたため、いくつかの点でやり直しています。
クラスのヘッダーファイルを定義していて、URLの静的定数を作成します。私は次のようにしてこれを試みています:
#include <string>
class MainController{
private:
static const std::string SOME_URL;
}
const std::string MainController::SOME_URL = "www.google.com";
しかし、これはリンク中に重複した定義を与えます。
どうすればこれを達成できますか?
移動します
const std::string MainController::SOME_URL = "www.google.com";
cppファイルに。ヘッダーにある場合、それを含むすべての.cppにコピーがあり、リンク中に重複したシンボルエラーが発生します。
あなたはラインを置く必要があります
const std::string MainController::SOME_URL = "www.google.com";
one-definition rule のため、ヘッダーではなくcppファイル内。また、クラスで直接初期化できないのは、std::string
は(intのような)整数型ではありません。
または、ユースケースによっては、静的メンバーを作成せずに、代わりに匿名の名前空間を使用することを検討できます。 この投稿のpro/consを参照 。
ヘッダーファイルでクラスを定義します。
//file.h
class MainController{
private:
static const std::string SOME_URL;
}
そして、ソースファイルで:
//file.cpp
#include "file.h"
const std::string MainController::SOME_URL = "www.google.com";
const std::string MainController::SOME_URL = "www.google.com";
定義を、ヘッダーではなく単一のソースファイルに入れます。