1

私はおそらくJavaに少し慣れてきたので、これが必要以上に難しいと感じています。これが私が持っているものです。

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; }
}

次に、別の方法で、次のように言うことができると思いました。

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

しかし、一般的なエラーが発生しています。非静的メンバー参照は、特定のオブジェクトに関連している必要があります。

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

4

4 に答える 4

3

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

于 2012-04-24T15:28:32.423 に答える
3
void check(){
   int y = item1.returnY;
   int x = item1.returnX;  
}

これはJavaでも正しくありません。静的returnXでもreturnY静的でもないため、操作を適用するオブジェクトが必要であり、メソッド呼び出しのかっこも必要です。

void check() {
   item1 i;
   int y = i.returnY();
   int x = i.returnX();
}
于 2012-04-24T15:29:37.713 に答える
3

オブジェクトのインスタンスが 1 つだけ必要なため、 Singleton パターンを実装しても害はないでしょう。オブジェクトを関数に対してグローバルまたは静的として宣言してから、値を取得することもできます。

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

于 2012-04-24T15:34:38.793 に答える
2

次の行でクラス item1 のインスタンスを作成しました

myObject[0] = new item1(this);

JAVA とは異なり、C++ にはポインターがあり、new はオブジェクトへのポインターを返します (したがって、myObject[0] はインスタンスへのポインターです)。そのため、-> 演算子が必要です。メソッドを有効にするには、次のように記述します。

myObject[0]->returnX();

クラスをシングルトンとして実装するよりもインスタンスを1つだけにしたい場合。

于 2012-04-24T15:36:19.637 に答える