请帮忙看一下为啥不能使用自定义的拷贝构造函数?谢谢
为啥不能使用自定义的拷贝构造函数
编译环境: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;可以的