【发布时间】:2012-03-28 12:04:12
【问题描述】:
我有一个名为 abc.h 的头文件,我想在其中定义一个带有外部链接的常量。因此它包含语句
---------------abc.h-------------------------
extern const int ONE = 1;
接下来,我有 main.cpp,我想在其中使用 ONE 的值。因此,我在 main.cpp 中声明 ONE,然后将其用作
---------------main.cpp---------------------
extern const int ONE;
int main()
{
cout << ONE << endl;
}
我收到错误“ONE 的多个定义”。
我的问题是,我如何声明一个带有外部链接的 const,然后在不同的文件中使用它,这样常量只有一个内存位置,而不是每个文件都包含一个静态版本的常量。
我从 main.cpp 中删除了#include "abc.h",一切正常。
g++ abc.h main.cpp -o main
ONE 的地址在 header 和 main 中是相同的。所以它有效。
但我不明白编译器如何在 main.cpp 中没有包含语句的情况下解析 ONE 的定义
g++ 似乎有一些魔力。这是一种不好的做法,main.cpp 的读者不知道在哪里声明 ONE,因为 main.cpp 中没有包含“abc.h”?
【问题讨论】:
-
您确定在这两个位置都有
extern吗? (您上面编译的代码对我来说很好)。另外,请查看Mixing extern and const。
标签: c++