外部数组定义
我想在不同的 cpp 文件中定义字符串数组,但是当我尝试使指针(数组元素)也为 const 时,定义和声明之间似乎存在一些差异。使用与声明相同的定义似乎工作正常,所以我怀疑初始化不是问题。在下面的代码中,我注释掉了有问题的 const - 所以它会编译,但如果 const 未注释,链接器(使用 g++ 4.6 和 VS10 测试)将找不到 ext_string_array。
main.cpp:
#include <iostream>
const char* const string_array[2] =
{
"aaa",
"bbb"
};
extern const char* /*const*/ ext_string_array[2]; // <- offending const
int main()
{
std::cout << string_array[0];
std::cout << ext_string_array[0];
}
定义.cpp:
const char* /*const*/ ext_string_array[2] = // <- offending const
{
"aaa",
"bbb"
};
I would like to define array of strings in different cpp file, but there seems to be some discrepancy between definition and declaration when I try to make pointer (array element) also const. Using the same definition as declaration seems to work fine, so I suspect initialization is not an issue. In the code below I have commented out offending const - so it will compile, but if const is un-commented, linker (tested with g++ 4.6 & VS10) will not find ext_string_array.
main.cpp:
#include <iostream>
const char* const string_array[2] =
{
"aaa",
"bbb"
};
extern const char* /*const*/ ext_string_array[2]; // <- offending const
int main()
{
std::cout << string_array[0];
std::cout << ext_string_array[0];
}
definition.cpp:
const char* /*const*/ ext_string_array[2] = // <- offending const
{
"aaa",
"bbb"
};
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在这种情况下,const 也意味着静态,除非您还指定了 extern。将您的 .cpp 文件更改为此
In this context const also means static, unless you also specify extern. Change your .cpp file to this
C++ 2003,3.5 程序和链接,3:
所以你需要在声明中显式的
extern
。C++ 2003, 3.5 Program and Linkage, 3:
So you need an explicit
extern
in the declaration..