1

t_vecclass のインスタンスへの参照を格納するベクトルがありますToo。コードを以下に示します。にはmain、 と同じメモリ アドレスを持つベクトル t_vec_2 がありますB::t_vec

しかし、 t_vec_2[0].val1 にアクセスしようとすると、エラーが発生しますval1 not declared

何が間違っているのか指摘していただけますか?また、メソッドからベクトルを返すより良い方法を知っている場合は、お知らせください。前もって感謝します。

class Too {      
      public:             
             Too();
             ~Too(){};
          int val1;
};

Too::Too(){
           val1 = 10;
           };


class B {
      public:
             vector<Too*> t_vec;
             Too*  t1;
             vector<Too*>& get_tvec();
             B(){t1 = new Too();};
             ~B(){delete t1;};
};

vector<Too*>& B::get_tvec(){
    t_vec.push_back(t1);
    return t_vec;
}

int main(){
    B b;
    b = B();
    vector<Too*>& t_vec_2 = b.get_tvec();

    // Getting error    
    std::cout << "\n val1 = " << t_vec_2[0].val1;
    return 0;
}
4

2 に答える 2

5

2つのエラーがあります:最初のエラーはすでに言われています、あなたは書くべきです

t_vec_2[0]->val1

それ以外の

t_vec_2[0].val1

2番目は奇妙な線b=B();です。

削除すべきだと思います。エラーが発生するのは、右側のパーツB()が作成された直後に削除されるためです。したがって、オブジェクトbに必要な10の値を取得することはできません。この行を削除するだけで大​​丈夫です!

于 2010-04-27T05:04:08.590 に答える
1

しかし、t_vec_2 [0] .val1にアクセスしようとすると、エラーval1が宣言されていません。

これは、ベクトルがTooオブジェクトではなくポインタを保持しているためです。次のように、ドット(.)演算子を矢印(->)演算子に置き換えます。

std::cout << "\n val1 = " << t_vec_2[0]->val1;

ただし、原則として、パブリックメンバーは一切使用しないでください。

于 2010-04-27T04:57:39.650 に答える