【问题标题】:undefined reference to static member variable in a static member function [duplicate]静态成员函数中对静态成员变量的未定义引用[重复]
【发布时间】:2013-08-23 21:26:39
【问题描述】:

这是我的头文件:

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

};

#endif // MAPOBJECT_H

不过return xoffset就行了;我收到以下错误: 对“MapObject::xoffset”的未定义引用 为什么?

【问题讨论】:

  • 你从未定义过xoffset,只是声明了它。将其放在一个源文件的全局范围内:float MapObject::xoffset;
  • 您是否在 .cpp 源文件中定义了静态 xoffsetyoffset 以提供正确的链接?请记住,非常量静态变量必须在外部定义并在类中声明。
  • 你需要把它放在.cpp文件中的静态变量:float MapObject::xoffset等。但是你确定要那些静态变量吗?
  • @WhozCraig 不是私下声明的吗?
  • 有趣是有道理的,感谢您提供的信息。生病删除我的评论。

标签: c++


【解决方案1】:

把它放在一个源文件中(看起来MapObject.cpp

#include "MapObject.h"

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


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

在 C++ 中,非 const static 成员必须在类定义中声明,并且在全局范围内定义,才能正确地为链接器提供一些可引用的内容。

【讨论】:

  • “使用外部链接定义”是什么意思?
  • @Mahesh 见this question
  • 我理解联动的概念。我不明白你的句子的上下文。我认为你的意思是定义应该在全球范围内。不是吗?
  • @Mahesh +1 你是对的。谢谢你的纠正。相应更新(已经漫长天)。
【解决方案2】:

您的MapObject.cpp 中必须有这样的内容:

float MapObject::xoffset = 0.0f;
float MapObject::yoffset = 0.0f;

这样你定义初始化他们。

【讨论】:

  • 我感谢@WhozCraig
  • 谢谢你的回答,但它不应该是静态浮动,只是浮动
  • @user2673108 我会改正的。
猜你喜欢
  • 2012-12-20
  • 2014-02-17
  • 1970-01-01
  • 2012-11-13
  • 1970-01-01
  • 2020-08-09
  • 2021-12-13
相关资源
最近更新 更多