扩展我以前的post,我无法理解为什么这段代码失败了。这里没有明确的陈述。
#include <vector>
class foo {
public:
int num;
int type;
foo()
: num(0)
, type(0)
{}
foo(foo &a)
: num(a.num)
, type(a.type)
{}
};
int main()
{
foo theFoo;
theFoo.num = 10;
theFoo.type = 2;
std::vector< foo > theVec;
theVec.push_back(theFoo);
return 0;
}
错误是
no matching function for call to ‘foo::foo(const foo&)’
mytest.cpp:12: note: candidates are: foo::foo(foo&)
mytest.cpp:8: note: foo::foo()
有人可以清楚地解释这里出了什么问题吗?
答案 0 :(得分:3)
错误消息足够清楚。在声明中
theVec.push_back(theFoo);
使用了类std :: vector push_back
的成员函数,它在类中以下列方式声明
void push_back(const T& x);
如您所见,参数定义为const引用。因此,要将对象x复制到容器中,对象的类型必须将复制构造器声明为
T( const T & );
或者在你的情况下
foo( const foo &a );
但你的班级没有这样的构造函数。所以编译器会发出错误。