复制构造函数错误示例

copy constructor error with example

本文关键字:错误 构造函数 复制      更新时间:2023-10-16

延伸我之前的帖子,我不明白,为什么这段代码失败了。这里没有显式语句

#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()
谁能清楚地解释一下这里出了什么问题?

错误信息足够清晰。在声明

theVec.push_back(theFoo);

类std::vector push_back中有一个已使用的成员函数,在类中以如下方式声明

void push_back(const T& x);
如您所见,形参被定义为const引用。要将对象x复制到容器中对象的类型必须将复制构造函数声明为
T( const T & );

或者在你的情况下

foo( const foo &a );

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