2011-09-22 18 views
0

私は、クラスの静的変数の説明を得ることができたと思っていました。C++静的変数と未解決の外部エラー

例: 私は完全に異なる機能、アルファとベータを実行する2つの異なるクラスを持っています。

//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(); 
} 

今、私はこれをコンパイルしようとすると、私は未解決の外部エラーを取得:

error LNK2001: unresolved external symbol "public: static class beta alpha::var" ([email protected]@@[email protected]@A)

私はないんだけど、それは次のようになりますので、アルファの中で、私はタイプベータの静的変数を宣言します何を変えるべきか、この作品のようなものを作るために何を追加する必要があるのか​​を確かめてください。私はx、y、zが本質的に同じベータ変数を共有したいと思っています。私は、それぞれにベータ変数を参照するだけでこの同じことを達成できると思います。クラスの静的メンバーがクラスのどのインスタンスでも同じ値を持つため、ここでstaticキーワードを使用して同じことを実行できるかどうかを知りたいと思います。その定義が間違っていない限り。

答えて

5

静的変数は、まだちょうど方法と同様に、どこかで定義する必要があります。

はmain.cppにでこれを入れて:

beta alpha::var; 
+1

これは愚かな質問のように思える場合はごめんなさい。これはグローバル変数を使用すると考えられますか? – Cuthbert

+2

いいえ(愚かでもグローバルでもない)。このリンクをご覧くださいhttp://www.parashift.com/c++-faq-lite/ctors.html#faq-10.12 –

4

はmain.cppににこれを追加:H-ファイルで

 
beta alpha::var; 

varが唯一の型宣言です。変数は、いくつかのソースファイルで作成する必要があります。クラス内の

関連する問題