【问题标题】:error using static variable unresolved external symbol / undefined reference [duplicate]使用静态变量的错误未解析的外部符号/未定义的引用[重复]
【发布时间】:2019-07-24 23:51:34
【问题描述】:

我正在使用static 变量。参考Unresolved external symbol on static class members后,修改程序为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 iteration\n";

        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 类中定义静态变量?

【问题讨论】:

  • Abc::ct 必须在你的类之外定义,在 main 之上。
  • 有什么方法可以只在类中定义static 变量? (当然没有const
  • 从您的示例中,实例数据似乎比静态数据更合适
  • @ewr3243 如果使用 C++17 或更高版本,则:inline static unsigned int ct;

标签: c++ class static


【解决方案1】:

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

unsigned int Abc::ct = 0;

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

static unsigned int ct;

到:

static inline unsigned int ct = 0;

【讨论】:

    【解决方案2】:

    你必须定义它:

    unsigned int Abc::ct = 0;
    

    Demo

    【讨论】:

    • 什么意思?在哪里定义? static呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-01
    • 2018-11-27
    • 1970-01-01
    • 2015-12-31
    • 1970-01-01
    • 2015-05-01
    • 2020-04-02
    相关资源
    最近更新 更多