读书人

请帮忙看一上为啥不能使用自定义的拷贝

发布时间: 2012-11-05 09:35:12 作者: rapoo

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

编译环境: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;可以的

读书人网 >C++

热点推荐