无法从Type *转换为Type&&

时间:2012-04-19 03:37:05

标签: c++ stl c++11 rvalue-reference

我有一个简单的类,我使用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;
}
};

我不明白出了什么问题。

编辑:我的原始代码(第一段代码)正常运行。无论出于何种原因,我不得不重建解决方案,然后编译好了。

1 个答案:

答案 0 :(得分:3)

在您的代码中,MyType是一种类型,而m是一个对象,因此new m(1,2,3)甚至没有意义。

写:

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

您也可以使用emplace_back代替push_back而不是

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

emplace_back更可取。