我认为这是一个老问题,但我不明白。
我有一个头例程,它的函数文件例程.cpp和主文件main.cpp。
标题中有:
class myclass{
public:
static const double a;
void mymethod();
};
const double myclass::a=0.0;
routines.cpp包含:#include"routines.h"
然后定义方法。
main.cpp也有#include"routines.h"
。
此设置提供链接错误:已定义。
public: static double const myclass::a" (?a148@myclass@@2NB) already defined in DBFLOWPAR2.obj
DBFLOWPAR2是我的主要文件。
如果我在routines.h中定义方法,它可以正常工作,但我不喜欢它。 还有什么可能吗?我不关心变量是如何定义的,我只是希望能够访问myclass.a并在其中找到正确的值。
答案 0 :(得分:4)
您应该在cpp文件中定义静态变量 动,
const double myclass::a=0.0;
到您的cpp
文件。
在头文件中定义a
会在包含标题的每个Translation Unit中创建变量的副本。
答案 1 :(得分:3)
您违反了One Definition Rule。由于您#include "routines.h"
位于多个文件中,myclass::a
的定义会出现在多个文件中。
您必须定义一次变量,并且只能定义一次。
选择方便的.cpp
文件,然后将您的定义移至.cpp
。
答案 2 :(得分:1)
class myclass{
public:
static const double a;
void mymethod();
};
const double myclass::a;
现在,您可以在包含标题的每个翻译单元中重新定义myclass::a
。
答案 3 :(得分:0)
不要将const double myclass::a=0.0;
放在头文件中,否则包含此文件的每个编译单元都将拥有它自己的独立变量。把它放到routines.cpp。