2017-03-12 7 views
-4

クラスオブジェクトのベクトルを作成する際に特に問題があります。最近、Javaから移行して、私はまだこのトピックで霧がかかっています。C++:クラスオブジェクトのベクトルを作成する

のは、私はFooクラスの異なるオブジェクトのベクトルを作成したい

Foo::Foo (string test) { 
    string str = test; 
} 

class Foo {...}

があるとしましょう。これは可能なのでしょうか?もしそうなら、簡単な方法は何ですか? (C++で)

私はこのような何かを考えていた:

vector<Foo> list; 
for (int i = 1;i<10;i++) { 
    Foo temp("test") 
    list.push_back(temp); 
} 

が、問題は、私はクラスの異なるインスタンスを作成したいということで、それらが同じオブジェクトを参照していません。

何か助けていただければ幸いです。ありがとう!

編集:ヘルプと種類のコメントありがとうございます。私はC++の新しいバージョンに切り替わっていないので、わかりやすい解決策(あなたが提案したもの)が私のプログラムではうまくいかないことに気付きました。この問題は解決されました。

+0

のstd ::ベクトルは、あなたが探しているものです: このコードを参照してください。 –

+0

異なるオブジェクトをプッシュバックしますか?私は完全に問題を起こすわけではありません。あなたは自分で答えを投稿しました.. –

答えて

1

あなたはvectorと呼ばれるものを探しています。 vectorArrayに似ていますが、実行時にサイズを変更することはできます。

std::vector<Foo> v { Foo("A"),Foo("B"),Foo("C") }; 

次に、v[0]を実行してオブジェクトにアクセスできます。初期化後にvectorに別のオブジェクトを追加する場合は、v.push_back(Foo("D"))

+0

ああ、なぜ私のプログラムがうまくいかないのか、愚かな間違いを発見した。コンパイラをC++ 11に変更するのを忘れました。問題が解決しました。ありがとう! –

-2

これを達成するにはSTLベクターライブラリを使用してください。

std::vector<Foo> vectorOfObjects; 

Foo newObject("A"); 
vectorOfObjects.push_back(newObject) 
vectorOfObjects[0].doSomething(); 
+0

私はコンストラクタのパラメータを持っていますので、次のようになります:2番目の行のFoo newObject( "stuff")?また、私はオブジェクトを押し戻すことでループしたい。最後の3行の周りにループを追加すると、ベクトルの項目は同じオブジェクトを参照するのでしょうか、それとも別のものを参照するのでしょうか? –

+0

アイテムをプッシュバックするたびに、名前が同じであっても、異なるオブジェクトになります。 – jmbockhorst

+0

ああ、私は彼らが同じ物を参照すると思った。ありがとうございました! –

0

この問題は、クラスにSTLベクトルを使用するだけで解決できると思います。

#include <iostream> 
#include <vector> 
using namespace std; 

class Rectangle{ 
    int length; 
    int width; 

    public: 
     Rectangle(int length, int width){ 
      this->length = length; 
      this->width = width;  
     } 


     int area(){ 
      return this->width * this->length; 
     } 
}; 

int main() { 
    vector<Rectangle> v; 
    v.push_back(Rectangle(1,2)); 
    v.push_back(Rectangle(3,4)); 

    cout << v[0].area()<<endl; 
    cout << v[1].area()<<endl; 
    // your code goes here 
    return 0; 
} 
関連する問題