2012-04-24 4 views
1

私はたぶんJavaに慣れてきたことがあります。私は何を持っているのHeres。目的と呼び出し方法の操作?

void check() 
{ 
    int y = item1.returnY(); 
    int x = item1.returnX();    
} 

しかし、私は一般的なエラーを取得しています::非静的メンバ参照は、特定のオブジェクトを基準にする必要があります

myObject[0] = new item1(this); 

class item1 
{ 
private: 
    int x; 
    int y; 

public:  
    item1(passedPointer* pOne) 
    { 
     x = 5; 
     y = 5; 
    } 

    int returnX() { return x; } 

    int returnY() { return y; } 
} 

はその後、別の方法では、私はちょうど言うことができると思いました。

このクラスitem1のインスタンスは1つしかありませんが、これを行うにはどうすればよいでしょうか?これは実際のコードではなく、私が実際にやっていることの単純な断片です。

+3

C++のOOPで本をスキミングする必要があります。これはJavaと少し異なります。 – chris

+2

...またはスキム以上。 – Jon

+0

投稿したコードは、C++やJavaのどちらでも意味をなさないので、実際のコードを投稿する必要があります。 –

答えて

3

Item1はクラスです。非静的メンバーにアクセスするには、そのインスタンスを作成する必要があります。いくつかの基本的な情報についてはhereを参照してください。

3
void check(){ 
    int y = item1.returnY; 
    int x = item1.returnX; 
} 

returnXreturnYいずれも静あるので、これはまた、Javaで正しくないだろう、あなたが操作を適用するオブジェクトを必要とし、あなたはまた、メソッド呼び出しの括弧が必要です。

void check() { 
    item1 i; 
    int y = i.returnY(); 
    int x = i.returnX(); 
} 
3

おそらくSingleton patternを実装しても、オブジェクトのインスタンスが1つだけで済むので、害はありません。オブジェクトをグローバル関数または静的関数として宣言し、値を取得することもできます。

また、関数を静的として宣言し、関数を返す必要のある変数の静的な値を初期化する別の関数を追加することもできます。あなたの状況に応じて、貼り付けた短いコードでは完全には理解できない多くの解決策があります。

2

は、Javaとは異なり、ライン

myObject[0] = new item1(this); 

とクラスITEM1のインスタンスを作成するには、C++でのポインタと新しいリターンオブジェクトへのポインタは、(そうmyObjectという[0]のインスタンスへのポインタである)が存在します - >演算子が必要です。メソッドをアクティブにするには、次のように記述する必要があります。

myObject[0]->returnX(); 

インスタンスを1つだけ持ちたい場合は、クラスをシングルトンとして実装する必要があります。

関連する問題