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_backas :

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

emplace_back更可取。

于 2012-04-19T03:37:59.643 回答