类中的static const

时间:2012-03-01 16:28:36

标签: c++

我认为这是一个老问题,但我不明白。

我有一个头例程,它的函数文件例程.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并在其中找到正确的值。

4 个答案:

答案 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)

MyClass.h

class myclass{
public:
   static const double a;
   void mymethod();
};

MyClass.cpp

const double myclass::a;

现在,您可以在包含标题的每个翻译单元中重新定义myclass::a

答案 3 :(得分:0)

不要将const double myclass::a=0.0;放在头文件中,否则包含此文件的每个编译单元都将拥有它自己的独立变量。把它放到routines.cpp。