C++ 使用静态int时Visual Studio 2017中出现错误LNK2001
我正在为uni做一些练习任务,我应该在类中创建静态int字段,但当我这样做时,我得到错误LNK2001。当我将其更改为常规int时,不会发生错误。有人能帮我吗?这是我的密码:C++ 使用静态int时Visual Studio 2017中出现错误LNK2001,c++,visual-studio-2017,lnk2001,C++,Visual Studio 2017,Lnk2001,我正在为uni做一些练习任务,我应该在类中创建静态int字段,但当我这样做时,我得到错误LNK2001。当我将其更改为常规int时,不会发生错误。有人能帮我吗?这是我的密码: #include <iostream> #include <string> using namespace std; class Uczelnia { public: virtual string getName() = 0; static int liczba_wszystk
#include <iostream>
#include <string>
using namespace std;
class Uczelnia {
public:
virtual string getName() = 0;
static int liczba_wszystkich_studentow;
};
class Politechnika:public Uczelnia {
public:
Politechnika(string a, int b) {
nazwa = a;
liczba_studentow = b;
liczba_wszystkich_studentow = +liczba_studentow;
}
string getName() {
cout << "Politechnika: " << nazwa << endl;
return nazwa;
}
~Politechnika() {
liczba_wszystkich_studentow = -liczba_studentow;
}
private:
string nazwa;
int liczba_studentow;
};
class Uniwersytet :public Uczelnia {
public:
Uniwersytet(string a, int b) {
nazwa = a;
liczba_studentow = b;
liczba_wszystkich_studentow = +liczba_studentow;
}
string getName() {
cout << "Uniwersytet: " << nazwa << endl;
return nazwa;
}
~Uniwersytet() {
liczba_wszystkich_studentow = -liczba_studentow;
}
private:
string nazwa;
int liczba_studentow;
};
int main() {
Politechnika p1("Warszawska", 200);
p1.getName();
Uniwersytet u1("Warszawski", 600);
}
您收到链接器错误,因为您尚未初始化静态成员。 您只需要在类之外初始化它
class Uczelnia {
public:
//..
static int liczba_wszystkich_studentow;
//..
};
int Uczelnia::liczba_wszystkich_studentow = 5;
在类内部初始化静态常量整数类型(如int)还有一些额外的复杂性,但是对于其他类型,您通常会在类定义之外的源文件中初始化这些静态成员 在类定义中有静态数据成员的声明,而不是它们的定义。类定义中声明的静态数据成员甚至可能具有不完整的类型。如果使用ODR静态数据成员,则应在某些模块中的类定义之外进行定义。比如说
int Uczelnia::liczba_wszystkich_studentow;
class Uczelnia {
public:
virtual string getName() = 0;
inline static int liczba_wszystkich_studentow;
};
C++ 17中,可以在类定义中的静态数据成员声明中使用内联说明符。 比如说
int Uczelnia::liczba_wszystkich_studentow;
class Uczelnia {
public:
virtual string getName() = 0;
inline static int liczba_wszystkich_studentow;
};
在本例中,代码将编译,编译器支持C++ 17…< /p>是否有任何代码文件执行静态int LIZZBAWSZSTYKICH?您显示的只是类内的声明。您需要像static int Uczelnia::liczbawszystkich_studentow=0这样的东西;在代码文件中。