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

我不明白怎么了。

编辑:我的原始代码(第一段)有效。无论出于何种原因,我都必须重新构建解决方案,然后再进行编译。

最佳答案

在您的代码中,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是可取的。

关于c++ - 无法从Type *转换为Type &&,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10221316/

10-13 08:31