0

クラス内にこのコードがあります:

void SendStones()
{
    int currenthole = hole;
    int lastplace = 0;
    for(int i=0;i<stns.size();i++)
    {
        while(1)
        {//Calculate new currenthole
            if(currenthole == 13) { currenthole = 7; break;}
            if(currenthole == 14) { currenthole = 6; break;}
            if((currenthole<=12 && currenthole > 7) || (currenthole<=6 && currenthole > 1)) { currenthole--; break;}
        }
        lastplace = stns.size()-1;
        hole[currenthole]->ReciveStone(stns[lastplace]);//PROBLEM
        stns.pop_back();
    }
}

vector<Stones*> stns;

したがって、このエラーが発生します:無効な型 `int[int]' for array subscript

何が問題なの? わかりません。ありがとう。

4

3 に答える 3

3

ホールは単純な int のように見えますが、添字を付けようとしています。そういうことですか?穴はどこで宣言されていますか?

于 2008-09-29T16:28:59.033 に答える
0

あなたの答えに基づいて、hole はn Hole オブジェクトへのポインタです。つまり、あなたのコードは、あなたが思っていることをしていないということです。

int currenthole = hole;

これは、配列コレクションの最初のオブジェクトを指すアドレス値を格納しています。つまり、このコードは

if(currenthole == 13) { currenthole = 7; break;}
            if(currenthole == 14) { currenthole = 6; break;}
            if((currenthole<=12 && currenthole > 7) || (currenthole<=6 && currenthole > 1)) { currenthole--; break;}

おそらくナンセンスです。

「配列添え字の無効な型 `int[int]'」エラーが発生する理由は説明されていません。という名前のint型の 2 番目の宣言がないことを確認しますか?

--実際、あなたが書いたものを読み直すと、あなたが思っていることをしていないことがさらに確信できます. SendStones はクラス Hole のメンバーですよね?穴クラスに穴メンバー変数が含まれていないことを確認してください。これはおそらく問題です。これは、hole と呼ばれるグローバル変数の前に検出されるためです (スコープ ルールを正しく覚えていれば)。

于 2008-09-29T16:45:11.100 に答える
0

Hole は非常に大きなクラスで、
SendStones はクラスの関数メンバーです。
ファイル全体を送信するわけではありませんが、
hole[currenthole] は Hole *hole[14]; であると言えます。
これは大きなプログラムとプロジェクトなので、必要な関連コードを送信しました。

ReciveStones 関数のコードは次のとおりです。



void ReciveStone(ストーン *rcvstone) { stns.push_back(rcvstone); }

于 2008-09-29T16:33:21.143 に答える