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