未定义的引用C++

fgf*_*jhm 2 c++ linker-errors

我有一个名为Student.h的文件,它以这种方式具有静态整数:

    class Student
{
public:
    static int _avrA,_avrB,_avrC,_avrD;
};
Run Code Online (Sandbox Code Playgroud)

我有继承Student.h的university.h.关于University.cpp的实现,其中一个函数返回:

return (_grade_average*(Student::_avrA/Student::_avrB))+7;
Run Code Online (Sandbox Code Playgroud)

并编译器写道:

对Student :: _ avrA的未定义引用.

你知道为什么会这样吗?

Set*_*gie 9

您已声明了这些变量,但尚未定义它们.所以你已经告诉编译器"某个地方我将要有一个带有这个名字的变量,所以当我使用这个名字时,不要在你到处寻找它的定义之前先找出未定义的变量." 1

.cpp文件中,添加定义:

int Student::_avrA; // _avrA is now 0*
int Student::_avrB = 1; // _avrB is now 1
int Student::_avrC = 0; // _avrC is now 0
int Student::_avrD = 2; // _avrD is now 2
Run Code Online (Sandbox Code Playgroud)

不要在做这个.h文件,因为如果你在两个不同的包括两次.cpp文件,你会得到多个定义错误,因为链接会看到不止一个文件,试图创建一个名为变量Student::_avrA,Student::_avbB等,并根据一个对规则的定义所有规则,这都是非法的.

1很像功能原型.在你的代码中,就好像你有一个函数原型但没有正文.

*因为"在没有显式初始化器的情况下,保证类的静态整数成员初始化为零".(TonyK)