1

単純なクラスがあり、std::vectorを使用してそのクラスのすべてのインスタンスを含めています。しかし、私がそうするとき:

std::vector<MyType> v;
MyType m(1, 2, 3);
v.push_back(m);

または私がそうする場合:

v.push_back(new MyType(1, 2, 3);

このエラーが発生します:

error C2664: 'void std::vector<_Ty>::push_back(_Ty &&)' : cannot convert parameter 1 from 'MyType *' to 'MyType &&'

そしてそれが重要な場合は、ここに私のMyTypeコードがあります:

class MyType
{
public:
  int a;
  int b;
  float c;

MyType(int A, int B, float C)
{
    a = A;
    b = B;
    c = C;
}
};

何が悪いのかわかりません。

編集:私のオリジナル(最初のスニペット)のコードは機能します。何らかの理由でソリューションを再構築する必要があり、その後、正常にコンパイルされました。

4

1 に答える 1

3

コードでMyTypeは、は型であり、mはオブジェクトであるため、new m(1,2,3)意味がありません。

書く:

v.push_back(MyType(1, 2, 3)); //without new

の代わりにpush_back、次のように使用することもできますemplace_back

v.emplace_back(1,2,3); //note there is no `MyType` now

emplace_back望ましいです。

于 2012-04-19T03:37:59.643 に答える