ご存知のように、定数のデフォルトは内部リンケージです。
const int Buf = 1000; // defaults to internal linkage
buf はヘッダー ファイルで定義できます。これは、それが定義されているファイル内でのみ表示され、リンク時に他の翻訳単位からは表示されません。
ただし、いくつかの複雑な構造定数が次のように定義されている場合:
- constants.h
const complicatedClass myObject("I'm a const object","internal linkage",5);
complexClass 定義:
class complicatedClass
{
private :
char* charArry;
std::string strTemp;
static int numbers;
int mSize;
public:
complicatedClass();
complicatedClass(char* pChrArry, std::string temp, int size);
~complicatedClass();
public:
void print() const;
std::string getStrTemp() const;
};
コンパイルは複雑な構造定数用のストレージを作成する必要があるようです。したがって、外部リンケージにする必要があります。ただし、この定数ヘッダー ファイル (constants.h) が複数のファイルに含まれている場合は問題ありません。リンカエラーが発生するはずだと思います.myObjectは多くの場所(複数のファイル)で定義されるべきではありません.
誰でもこの問題を説明できますか? 前もって感謝します。