【问题标题】:Undefined reference to static variable [duplicate]对静态变量的未定义引用[重复]
【发布时间】:2013-01-15 05:03:10
【问题描述】:

可能重复:
C++: undefined reference to static class member

我正在使用 MinGW。为什么静态变量不起作用

[Linker error] undefined reference to `A::i' 

#include <windows.h>

    class A { 
        public:     
        static int i;
        static int init(){

            i = 1;  

        }

    };

int WINAPI WinMain (HINSTANCE hThisInstance,
                    HINSTANCE hPrevInstance,
                    LPSTR lpszArgument,
                    int nFunsterStil){
    A::i = 0;
    A::init();

    return 0;
}

【问题讨论】:

标签: c++


【解决方案1】:

你只声明了A::i,使用前需要定义A::i

class A  
{ 
public:     
  static int i;
  static void init(){
     i = 1;  
  }
 };

int A::i = 0;

int WINAPI WinMain (HINSTANCE hThisInstance,
                HINSTANCE hPrevInstance,
                LPSTR lpszArgument,
                int nFunsterStil)
{
  A::i = 0;
  A::init();

  return 0;
}

你的 init() 函数也应该返回一个值或设置为 void。

【讨论】:

  • 如果是私有的呢?你还能访问它来定义它吗?
  • @Goodies 我在测试中对私有静态成员没有任何问题。虽然我需要这个评论的第一个链接的提示:这个问题的stackoverflow.com/questions/14331469/…。我认为在您的情况下,这似乎是私人成员的问题。如果是类定义中成员可见性的结构性问题,并且您需要特定的成员声明顺序,则您还可能依次拥有多个私有/公共/受保护的块(每个都有一个或多个成员)。
【解决方案2】:

你已经在你的类中声明了A::i,但你还没有定义它。必须在class A之后添加定义

class A {
public:
    static int i;
    ...
};

int A::i;

【讨论】:

    猜你喜欢
    • 2012-08-20
    • 2016-08-04
    • 2020-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多