【问题标题】:C++ Static variable and unresolved externals errorC++ 静态变量和未解决的外部错误
【发布时间】:2011-09-22 05:59:03
【问题描述】:

我希望我能对类的静态变量有所了解。

例如: 我有两个不同的类,它们执行完全不同的功能,alpha 和 beta。在 alpha 中,我声明了一个 beta 类型的静态变量,所以它看起来像这样:

//alpha.h

#pragma once
#include <iostream>
#include "beta.h"

class alpha{
public: 
    alpha(){

    }

    static beta var; 

    void func(){
        var.setX(3);
    }

    void output(){

    }
};

//beta.h

#pragma once
#include <iostream>
using namespace std; 

class beta{

public: 

    int x; 
    char y; 

    beta(){
        x = 0; 
        y = ' '; 
    }

    void setX(int _X){
        x = _X; 
    }

};

//main.cpp

#include <iostream>
#include <iomanip>
#include "alpha.h"
using namespace std; 

int main(){
    alpha x, y, z; 
    x.func(); 
}

现在当我尝试编译它时,我得到一个未解决的外部错误:

错误 LNK2001:无法解析的外部符号“公共:静态类 beta alpha::var" (?var@alpha@@2Vbeta@@A)

我不确定要更改什么或需要添加什么才能使此类工作正常进行。我希望 x、y 和 z 本质上共享相同的 beta 变量。我想我可以通过将一个 beta 变量通过引用传递给每个变量来完成同样的事情。但是我想知道是否可以在这里使用 static 关键字来做同样的事情,因为类的静态成员在类的任何实例中都具有相同的值。除非我的定义是错误的。

【问题讨论】:

    标签: c++ class static linker-errors


    【解决方案1】:

    类中的静态变量仍然必须在某个地方定义,就像方法一样:

    把这个放到main.cpp中:

    beta alpha::var;
    

    【讨论】:

    【解决方案2】:

    将此添加到 main.cpp:

    贝塔阿尔法::var;

    h 文件中的 var 只是类型声明。变量应该在某个源文件中创建。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-11
      • 2011-03-10
      • 1970-01-01
      • 1970-01-01
      • 2012-06-18
      相关资源
      最近更新 更多