Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.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++ - Fatal编程技术网

C++ 静态成员函数中对静态成员变量的未定义引用

C++ 静态成员函数中对静态成员变量的未定义引用,c++,C++,这是我的头文件: class MapObject: public ScreenObject { static float xoffset, yoffset; public: static float Getxoffset() { return xoffset; } }; #endif // MAPOBJECT_H 然而,在线返回xoffset;我得到以下错误: 对“MapObject::xoffset”的未定义引用 为什么?您的MapObject.c

这是我的头文件:

class MapObject: public ScreenObject {
    static float xoffset, yoffset;
public:
    static float Getxoffset() {
        return xoffset;
    }

};

#endif // MAPOBJECT_H
然而,在线返回xoffset;我得到以下错误: 对“MapObject::xoffset”的未定义引用
为什么?

您的
MapObject.cpp中必须有类似的内容:

float MapObject::xoffset = 0.0f;
float MapObject::yoffset = 0.0f;
通过这种方式,您可以定义和初始化它们。

将其放入源文件(从它的外观来看,
MapObject.cpp


C++中的非const <代码> static 成员必须在类定义中声明,并用全局范围定义,以正确地给出链接器的引用。p> 您从未定义过

xoffset
,只声明了它。将其放在一个源文件的全局范围内:
float-MapObject::xoffset
。您是否在.cpp源文件中定义了statics
xoffset
yoffset
,以提供正确的链接?记住,非常量静态必须在外部定义,也必须在类中声明。您需要在.cpp文件中声明它的静态变量:
float-MapObject::xoffset
,等等。但是您确定要使用这些静态变量吗?@WhozCraig所有内容都不是以私有形式声明的吗?非常有趣,感谢您提供的信息。我将删除我的评论。你所说的“用外部链接定义”是什么意思?@Mahesh请看我理解链接的概念。我不明白你这句话的来龙去脉。我想你的意思是定义应该在全球范围内。是吗?@Mahesh+1你说得对。谢谢你的更正。相应地进行了更新(这是漫长的一天)。我感谢@WhozCraigthank您的回答,但是它不应该是静态浮动的,只是float@user2673108我会改正的。
#include "MapObject.h"

float MapObject::xoffset = 0;
float MapObject::yoffset = 0;


//... the rest of your MapObject code here...