使用静态变量未解析的外部符号/未定义的引用时出错



我正在使用static变量。在引用静态类成员上的未解析外部符号后,我用Abc::ct修改了程序

#include <iostream>
class Abc
{
private:
    static unsigned int ct;
public:
    void f1()
    {
        for (int i = 0; i < 5; ++i)
            f2();
    }
    void f2() {
        Abc::ct = 0;
        if (Abc::ct == 0)
            std::cout << "Zero iterationn";
        std::cout << Abc::ct << "t";
        ++Abc::ct;
    }
};

int main()
{
    Abc obj;
    obj.f1();
}

但在 MSVC 中error LNK2001: unresolved external symbol "private: static unsigned int Abc::ct"错误或在 g++ 中undefined reference to Abc::ct错误。如何在类Abc中定义静态变量?

您声明了static变量,但没有定义和初始化它。在 main() 上方,但在类之外,添加以下行:

unsigned int Abc::ct = 0;

或者,如果您使用的是 C++17 ,则可以更改:

static unsigned int ct;

自:

static inline unsigned int ct = 0;

你必须定义它:

unsigned int Abc::ct = 0;

演示

最新更新