1

だから私はこの行を持っています:

ArrayList<Operation> operations();

さて、これは私の ArrayList クラスと私の Operation 構造体です:

typedef struct Operation {
    char key; 
    int value;
} Operation;
template <class DT>
class ArrayList
{
private:
    int _capacity;
    int _size;
    DT* elements;
public:
    ArrayList();
    ~ArrayList();
    void insert (DT&);
    DT& operator[] (int);
};
ArrayList<DT>::ArrayList()
{
    _capacity = 10;
    _size = 0;
    elements = new DT[10];
}

エラーが発生していないため、他のメソッドのコードを投稿する必要はありません。ただし、それらを見たい場合は、尋ねる必要があります。

今、私が何かをしようとするたびに

operations.insert(x) //assuming x is a struct that exists.

また

operations[i].key; //assuming i is a declared and initialized index.

それは私にerror C2228: left of (fill in the blank) must have class/struct/union とを与えますerror C2109: subscript requires array or pointer type

この問題に関する以前のスレッドを見たことがありますが、私の問題は、コンパイラが宣言として提供したコードの最初の行を受け取り、初期化を行わないことだと思います。しかし、私はこれに対する解決策を見ませんでした。私の頭の中で唯一の解決策は、それをポインターにして使用すること= new ...ですが、私の頭の中でキーワードnewは意地悪の同義語であるため、単にオブジェクトにしたかったのです。これを回避する方法は何ですか?あるいは、私が間違っているのかもしれません。structこれは、私が s を扱うのはこれが初めてなので、オブジェクト タイプが a であることと関係がありますstruct

4

1 に答える 1

2

この行:

ArrayList<Operation> operations();

を返す関数を宣言します。ArrayList<Operation>

これは、一般的に最も厄介な解析と呼ばれます。

を宣言するにArrayList<Operation>は、括弧を削除します。

ArrayList<Operation> operations;
于 2012-11-28T22:12:08.453 に答える