C++静态变量和未解析的外部错误

Cut*_*ert 0 c++ static class linker-errors

我希望我能对类的静态变量做一些澄清.

例如:我有两个不同的类,它们执行完全不同的功能,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(); 
}
Run Code Online (Sandbox Code Playgroud)

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

错误LNK2001:未解析的外部符号"public:static class beta alpha :: var"(?var @ alpha @@ 2Vbeta @@ A)

我不确定要改变什么,或者我需要添加什么来制作像这样的工作.我希望x,y和z基本上共享相同的beta变量.我想我可以通过将一个beta变量引用到每个变量中来完成同样的事情.但是我想知道在这里使用static关键字是否可以做同样的事情,因为类的静态成员在类的任何实例中都具有相同的值.除非我的定义错了.

Vau*_*ato 5

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

把它放在main.cpp中:

beta alpha::var;
Run Code Online (Sandbox Code Playgroud)

  • 不,它不是(既不愚蠢也不全球:).请查看此链接http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.12 (2认同)