复制构造函数错误与示例

时间:2014-06-29 11:33:05

标签: c++ vector copy-constructor

扩展我以前的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()

有人可以清楚地解释这里出了什么问题吗?

1 个答案:

答案 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 );

但你的班级没有这样的构造函数。所以编译器会发出错误。