C++ 带有静态变量的未解析外部变量
我有一个名为Pub的类,它具有以下标题:C++ 带有静态变量的未解析外部变量,c++,visual-studio-2012,static,include,double,C++,Visual Studio 2012,Static,Include,Double,我有一个名为Pub的类,它具有以下标题: #pragma once class Pub { public: static double X_FACTOR; static double Y_FACTOR; static const int INIT_SCREEN_WIDTH=500; static const int INIT_SCREEN_HEIGHT=550; Pub(void); ~Pub(void); }; 我试图用以下方法设置
#pragma once
class Pub
{
public:
static double X_FACTOR;
static double Y_FACTOR;
static const int INIT_SCREEN_WIDTH=500;
static const int INIT_SCREEN_HEIGHT=550;
Pub(void);
~Pub(void);
};
我试图用以下方法设置main.cpp中的变量Y_FACTOR:
Pub::Y_FACTOR=1.0;
是的,Pub.h被正确地包括在内,这可以被演示为我可以访问INIT_SCREEN_WIDTH和INIT_SCREEN_HEIGHT
但是,当我执行此操作时,会出现以下错误:
错误6错误LNK2001:未解析的外部符号“公共:静态
双重发布::Y_因子“
(?Y)_FACTOR@Pub@@2NA)C:\Users\Pedro Estevan Juarez\Documents\Visual Studio
2012\Projects\Project2\Project2\main.obj Project2错误7错误
LNK1120:1未解析的外部C:\Users\Pedro Estevan Juarez\Documents\Visual
Studio 2012\Projects\Project2\Debug\Project2.exe 1 1 Project2
我怀疑这是语法方面的问题,有人能帮我吗?类定义中的代码只是一个声明。您需要在cpp文件中添加静态变量的定义。 在使用任何函数之前,将其添加到cpp文件和文件范围中
double Pub::Y_FACTOR;
是的,这很有效,但是为什么呢?在我看来,这真的是一件很难做到的事吗?是的,C++中有一件事不是直觉的。C++标准定义了这种方式。若标准将其定义为definition,那个么当这个头文件包含在多个cpp中时,它将涉及ODR。