如果我在头文件中这样定义我的常量变量...
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
在许多库中用作宏,如果你使用它,可能会得到奇怪的结果。 - thebretnessextern
就没问题了。 - sellibitzeconst
对象默认具有外部链接性,这意味着extern
不会改变任何东西。 - AnT stands with Russia