在调试链接器错误方面,我相对缺乏经验。我不知道我的代码设置如何会导致链接器抛出错误。请帮助指出我的遗忘。
// 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'。这是否意味着我必须在源文件而不是标题中定义该函数?为什么?我以为既然我在上面的类中声明了变量,它应该能够找到对该变量的引用吗?
编辑: 对不起,如果我听起来无知,但我认为使用整数类型的静态变量,你可以在类中定义和声明它'定义,这就是我所做的。只有非整数类型,你必须在课堂之外定义它'像复制帖子中的定义。
答案 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。