【发布时间】:2011-01-20 16:23:50
【问题描述】:
如果我像这样在标题中定义常量变量...
extern const double PI = 3.1415926535;
extern const double PI_under_180 = 180.0f / PI;
extern const double PI_over_180 = PI/180.0f;
我收到以下错误
1>MyDirectX.obj : error LNK2005: "double const PI" (?PI@@3NB) already defined in main.obj
1>MyDirectX.obj : error LNK2005: "double const PI_under_180" (?PI_under_180@@3NB) already defined in main.obj
1>MyDirectX.obj : error LNK2005: "double const PI_over_180" (?PI_over_180@@3NB) already defined in main.obj
1>MyGame.obj : error LNK2005: "double const PI" (?PI@@3NB) already defined in main.obj
1>MyGame.obj : error LNK2005: "double const PI_under_180" (?PI_under_180@@3NB) already defined in main.obj
1>MyGame.obj : error LNK2005: "double const PI_over_180" (?PI_over_180@@3NB) already defined in main.obj
但是如果我从标题中删除这些常量并将它们放入包含这样标题的文档中......
const double PI = 3.1415926535;
const double PI_under_180 = 180.0f / PI;
const double PI_over_180 = PI/180.0f;
有效
有人知道我做错了什么吗??
谢谢
【问题讨论】:
-
你应该写
180.0而不是180.0f,因为你处理的是双精度而不是浮点数。还将PI重命名为更独特的名称。PI在许多库中用作宏,如果使用它,可能会得到奇怪的结果。 -
失去
extern,你会没事的。 -
@sellibitze:不在 C 中,
const对象默认具有外部链接,这意味着extern不会改变任何东西。
标签: c++ c visual-studio visual-studio-2008 visual-c++