我有一个简单的类,我使用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;
}
};
我不明白出了什么问题。
编辑:我的原始代码(第一段代码)正常运行。无论出于何种原因,我不得不重建解决方案,然后编译好了。
答案 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
更可取。