C++ 使用静态int时Visual Studio 2017中出现错误LNK2001

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

我正在为uni做一些练习任务,我应该在类中创建静态int字段,但当我这样做时,我得到错误LNK2001。当我将其更改为常规int时,不会发生错误。有人能帮我吗?这是我的密码:

#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这样的东西;在代码文件中。