Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 带有静态变量的未解析外部变量_C++_Visual Studio 2012_Static_Include_Double - Fatal编程技术网

C++ 带有静态变量的未解析外部变量

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); }; 我试图用以下方法设置

我有一个名为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);
};
我试图用以下方法设置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。