【问题标题】:Undefined Reference in C++ using static class使用静态类的 C++ 中的未定义引用
【发布时间】:2022-01-04 00:10:35
【问题描述】:

几个小时以来,我一直在寻找这个问题的答案。即使我有一个解决方法,我也想了解这个问题。链接以下内容时出现未定义的引用错误:

.h:

class Test
{
public:
    class Class1
    {
    public:
        Class1(int i);
        int x;      
        void Inc();
    };
    
    static Class1 one;  
    static int F1();    
    
    
};

.cpp:

#include "Test.h"
Test::Class1 one(0);
void Test::Class1::Inc()
{
    x++;
}
Test::Class1::Class1(int i)
{
    x = i;
}

int Test::F1()
{
    //extern Test::Class1 one;  
    one.Inc();
    return one.x;
}

我在 F1 函数中获得了对 Test:one 的未定义引用。如果我添加 extern Test::Class1 一个,它似乎可以工作。为什么需要这样做?

【问题讨论】:

  • 你到底想用Test::Class1 one(0);实现什么?
  • 投票结束是一个错字。 Test::Class1 one(0); 应该是 Test::Class1 Test::one(0);
  • @kevin 这不是一个简单的错字,而是使用嵌套类型时常见的混淆。

标签: c++ static inner-classes class-variables qualified-name


【解决方案1】:

由于嵌套类,这有点令人困惑,但它很简单:

Test::Class1 Test::one(0);

您的代码中的以下语句仅定义了一个全局对象one,它恰好是嵌套类型:Test::Class1

Test::Class1 one(0); 

如果它不是嵌套类型,您会立即注意到缺少的限定符 ;-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-17
    • 2020-08-04
    • 2011-02-07
    • 2021-07-10
    相关资源
    最近更新 更多