链接器错误:函数中未定义的引用到另一个类中的静态变量

时间:2017-04-08 16:16:15

标签: c++ linker

在调试链接器错误方面,我相对缺乏经验。我不知道我的代码设置如何会导致链接器抛出错误。请帮助指出我的遗忘。

// This is the header file
class A
{
public:
  //Constructor, methods, etc.

  static unsigned int const length = 5;
};

class B
{
public:
  // Constructor, methods, etc.

  inline unsigned int const & GetLength(void)
  {
    return A::length;
  }
};

我收到链接器错误,说在源文件(cpp)中,GetLength()函数中的未定义引用为' A :: length'。这是否意味着我必须在源文件而不是标题中定义该函数?为什么?我以为既然我在上面的类中声明了变量,它应该能够找到对该变量的引用吗?

编辑: 对不起,如果我听起来无知,但我认为使用整数类型的静态变量,你可以在类中定义和声明它'定义,这就是我所做的。只有非整数类型,你必须在课堂之外定义它'像复制帖子中的定义。

1 个答案:

答案 0 :(得分:0)

您只有声明了您的A::length静态成员。您需要另外定义它在一个,而且只有一个cpp文件。

// in a cpp file
#include "a.hpp" // declaration is here (the code you posted)

int A::length = 5; // this, the definition, is also needed.

请参阅for example this