16

共享标头。

我可以做这个:

const bool kActivatePlayground=false;

包含在多个文件中时工作正常。

我不能做到这一点:

const char * kActivePlayground = "kiddiePool";

导致错误:重复符号。

但这有效:

static const char * kActivePlayground = "kiddiePool";

为什么static需要 theconst char *而不是 the const bool?另外,我认为static没有必要,因为const总是static隐含的?

4

2 回答 2

31

在 C++ 中,const变量默认具有静态链接,而非const变量具有外部链接。

多重定义错误的原因是

const char * kActivePlayground = "kiddiePool";

创建具有外部链接的变量。

嘿等等,我不是说const变量默认为静态链接吗?是的,我做到了。但kActivePlayground不是const。它是指向 的非const指针const char

这将按您的预期工作:

const char * const kActivePlayground = "kiddiePool";
于 2013-04-05T05:01:20.990 回答
0

您可以使用常量字符数组

const char kActivePlayground[] = "kiddiePool";

而 kActivePlayground 也可以用于赋值,因为它是一个引用

const char* playground_text = kActivePlayground;
于 2015-10-02T15:14:21.863 回答