如您所知,常量默认为内部链接。
const int Buf = 1000; // defaults to internal linkage
Buf 可以在头文件中定义,它仅在定义它的文件中可见,并且在链接时不能被其他翻译单元看到。
但是,如果一些复杂的结构常量定义如下:
- constants.h
const complicatedClass myObject("I'm a const object","internal linkage",5);
复杂类定义:
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
谁能解释这个问题?提前致谢。