2016-11-24 9 views
0

私はこの行のエラーを持っている:'演算子[]' の不一致(オペランドの型は 'Briques' と 'int型です)

Briques brique = brique[i][j]; 

は言っていない:

を一致

BriquesTable.hで定義されたクラスであるため、 '演算子[]' のために(オペランドの型は 'Briques' と 'int型です)...

私は、理由を理解していません

class Briques { 
public: 
    int type; 
    bool state; 
}; 

そしてTable.hました:

Briques brique[BOARD_WIDTH][BOARD_HEIGHT]; 

を任意の助けをいただければ幸いです。私はエラーがクラスBriquesが配列を考慮しないことを意味すると思いますか?それとも、そのようなもの...しかし、私は問題を解決することはできません。

また、何かについてより多くのコードが必要な場合は、私に教えてください、ここに新しい! :D

+4

名前についてです。新しい変数 'brique'を宣言すると、その名前の以前の使用が隠されます。 –

+0

@BoPerssonああ、ありがとう!それは面白いそのような初心者の間違いだったXD –

答えて

1

新しい変数名としてbriqueを使用することはできません。

brique[x][y]は、新しく定義されたbriqueを参照するため、エラーが発生します。

3

あなたのコードBriques brique = brique[i][j];はあなたが意図したものではありません。

変数briqueを外部スコープ内の別の変数briqueから初期化することを宣言したいが、コンパイラは最初にスコープ内の最も近い変数を初期化のために探している。あなたはローカルスコープ(あなたが宣言している1)でbriqueという名前の変数を持っているので

、それが初期化のために使用されていますが、宣言しているこのローカルbriqueは(タイプBriquesのですあなたが望んでいた1とは異なり、タイプBrique[][])、実際にはoperator[]が宣言されていません。

ちょうどあなたの宣言を変更:

Briques b = brique[i][j]; 

は、あなたのコード内で名前の競合を避けてください。この2行Whith

+0

ありがとう...それはうまくいくようでした! –

+0

「曖昧」ではありません。あいまいであればコンパイルできません。この標準は、プログラムのセマンティクスが何であるかを正確に記述しています(2番目のパラグラフで説明した通りです)。それは、OPが意図したものを意味するものではありません。 –

+0

@LightnessRacesinOrbitあなたは正しいです、 "あいまい"はここではマナプロピズムです。私は自分の答えを編集した – wasthishelpful

1
Briques brique[BOARD_WIDTH][BOARD_HEIGHT]; 
Briques brique = brique[i][j]; 

あなたは二行目brique[i][j];

で同じ名前brique

ための2つの宣言を持っているが、名前の最後のオブジェクトを参照するbriqueあなたは宣言しています

Briques brique = brique[i][j]; 

あなたは次のようなことをしています:

Object a = a[i][j]; 
関連する問題