首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请帮忙看一上为啥不能使用自定义的拷贝构造函数?多谢

2012-11-05 
请帮忙看一下为啥不能使用自定义的拷贝构造函数?谢谢为啥不能使用自定义的拷贝构造函数编译环境:VS2010usi

请帮忙看一下为啥不能使用自定义的拷贝构造函数?谢谢
为啥不能使用自定义的拷贝构造函数

编译环境:VS2010


using namespace std;
class CBoard
{
public:
  //CBoard(CBoard &);  
  CBoard(int v1, int v2):x(v1), y(v2){}

  bool operator <(const CBoard &tmp)const
  {
  if (x < tmp.x)
  return true;
  else
  return false;
  }



private:
  int x;
  int y;

private:
  CBoard& operator = (CBoard &tmp);

};

/*
CBoard::CBoard(CBoard & tmp)
{
  x = tmp.x;
  y = tmp.y; 

}
*/
int _tmain(int argc, _TCHAR* argv[])
{  
  CBoard b1(1,2);
  CBoard b2(b1);
  set<CBoard> settest;

  settest.insert(b1);

  return 0; 
}

[解决办法]
我用VC2008,在原代码有注释掉部分代码的情况下,编译通过。删去注释,编译出现错误。
将CBoard(CBoard &); 改为CBoard(const CBoard &); 并修改相应定义,编译通过。
因为STL里insert要调用很多层函数,第一层函数就加了const,第n层调用复制构造函数。但你提供的的参数不是const的,就出错了。

[解决办法]
CBoard(const CBoard &);通过
[解决办法]
拷贝构造函数应该是
原型应该是 CBoard(const CBoard &)

改成return x<tmp.x;可以的

热点排行