C++ 在静态函数中初始化静态变量会导致无法解析
我想在函数SetParameters中初始化静态变量deltaDistance。所以在*.cpp文件中我写了C++ 在静态函数中初始化静态变量会导致无法解析,c++,static,static-methods,C++,Static,Static Methods,我想在函数SetParameters中初始化静态变量deltaDistance。所以在*.cpp文件中我写了 class PossibilisticShellClustering { public: PossibilisticShellClustering(void); ~PossibilisticShellClustering(void); static void SetParameters(double deltaDistance); static doub
class PossibilisticShellClustering
{
public:
PossibilisticShellClustering(void);
~PossibilisticShellClustering(void);
static void SetParameters(double deltaDistance);
static double deltaDistance
};
然而,我得到链接错误
未解析的外部符号“公共:
双稳态
可能性ShellClustering::deltaDistance“
(?deltaDistance@PossibilisticShellClustering@@2NA)
谁能告诉我为什么
void PossibilisticShellClustering::SetParameters(double deltaDistance)
{
PossibilisticShellClustering::deltaDistance = deltaDistance;
}
您需要在程序中的某个源文件(通常是.cc或.cpp文件)中定义
possibilityShellClustering::deltaDistance
PossibilisticShellClustering.obj
您在类主体中拥有的(或者如果它以
;
终止时将会拥有的)只是一个声明。静态数据成员也需要一个定义。静态双deltaDistance之后没有分号,并显式初始化它,我会说。@Unaperson:它将首先初始化为零,当他为以后的显式赋值编写函数时,除非他有一个启动时需要的特殊值,而且显式初始化器似乎有点多余。我讨厌遇到没有初始化的静态,然后想知道创建它们的人是否真的希望它们默认初始化为零,或者只是忘了初始化它们。毕竟,显式初始化只需要几个按键。@Unaperson:我讨厌遇到静态。.-)即使您想要零初始化默认值,强制执行静态的显式初始化也不是我非常关心的事情。任何试图忘记将静态初始化为非零值的人都需要更彻底地测试他们的代码。一个好的静态分析工具(甚至是编译器)可以检测非显式初始化的静态,IMHO应该这样做——毕竟,损失在哪里?我同意,在伟大的计划中,它可能不是错误,但如果它是另一件可能出错的事情,为什么不诊断它呢?
double PossibilisticShellClustering::deltaDistance;