2012-04-17 8 views
-1

私は十分な情報を提供しており、これを正しく題名したことを願っています。staticクラスは他のクラスと同じ値を表示しません

一般に、アプリケーションにデータを格納するクラスが必要です。同じデータにアクセスするには、いくつかのクラスが必要です。基本的に複数のクラス間でデータを共有します。

短い/簡潔なコードは、以下:

example.cpp(メインアプリケーション)

// example.cpp : Defines the entry point for the console application. 
// 
#include "AnotherClass.h" 
#include "ObjectClass.h" 
#include "stdafx.h" 
#include <iostream> 
#include <iomanip> 

using namespace std; 
//Prototype 
static void do_example (); 

int main() 

{ 
    do_example (); 
} 

static void do_example () { 


    MyObject.a = 5; 
    cout <<"MyObject.a value set in main application is "<<MyObject.a<<"\n"; 

    AnotherClass m_AnotherClass; 

    m_AnotherClass.PrintValue(); 

}  

ObjectClass.h

をObjecClass.cpp

#include "ObjectClass.h" 

ObjectClass::ObjectClass() { 

    a = 0; 

} 

AnotherClass。 h

class AnotherClass { 
public: 
    AnotherClass(); // Constructor 

    void PrintValue(); // Public function 
    int value; // Public variable 

}; 
AnotherClass.cpp

#include "AnotherClass.h" 
#include "ObjectClass.h" 
#include "stdafx.h" 
#include <iostream> 
#include <iomanip> 

using namespace std; 

AnotherClass::AnotherClass() { 

    value = MyObject.a; 

} 

void AnotherClass::PrintValue() { 

    cout <<"value in AnotherClass is "<<value<<"\n"; 
    cout <<"it should be the same."<<"\n"; 
} 

しかし、それはMyObjectにの新しいインスタンスであるかのように値が、0のデフォルト値です。しかし、静的なMyObjectから5の値を引き出す必要があります。

私には何が欠けていますか?

+2

問題を再現する実際のコンパイル可能なコードを投稿してください。 – Mat

+0

あなたは[シングルトンデザインパターン](http://stackoverflow.com/questions/1008019/c-singleton-design-pattern)を探しています –

+0

短く/簡潔なコンパイル可能なコードが追加されました。それはとてもシンプルなコードです。それは動作するはずです。 – JeffS

答えて

3

静的クラスインスタンスは静的変数そのものです。しかし、あなたのコードでは、静的インスタンスの処理方法が示されていません。実際には、両方ともMyClassInstanceが同じオブジェクトを参照する場合は、静的宣言も必要ありません。

また、静的変数はcppファイルで定義されています。ヘッダーに定義すると、それを含むcppファイル(コンパイル単位)は別の静的変数を定義します。したがって、メインのcppファイルで静的オブジェクトを定義し、ヘッダファイルにextern MyStaticClassを使用します。リンカーはその使用を同じ変数にリンクします。

+0

SCCが上記に追加されました。これはかなり簡単ですが、静的オブジェクトを同じデータを含むものとして扱うようには見えません。 – JeffS

+0

ちょうど1つのcppファイルに静的変数を定義し、ヘッダーに 'extern'を使用する必要があります。あなたが持っている方法は、各コンパイルユニットのための別々のオブジェクトを作成します。 – perreal

+0

正しいですが、externで定義された変数は静的であり、そのように宣言する必要はありません。 extern Objectclass MyObjectを追加しました。 AnotherClass.cppに渡し、ObjectClass.h内の静的インスタンスを削除しました。次に、example.cpp(main)に静的ではないObjectClass MyObject宣言を追加しました。それはすべて意図どおりに動作しています。ありがとう:) – JeffS

関連する問題