相同的外部函数和成员函数声明

using namespace std;
class HasPtr;
void swap(HasPtr &, HasPtr &);
class HasPtr
{
	friend void swap(HasPtr &, HasPtr &);
public:
	HasPtr(const string &s = string()) :ps(new string(s)), i(0) {}
	~HasPtr();
	HasPtr(const HasPtr &chp) : ps(new string(*chp.ps)), i(chp.i) {}
	HasPtr & operator=(HasPtr);
	void swap(HasPtr &lhp , HasPtr &rhp);  // *引起符号错误 link2019
private:
	string *ps;
	int i;
};
HasPtr& HasPtr::operator=(HasPtr rhp)//类值拷贝
{
	swap(*this, rhp);
	cout << "operator= swap()" << endl;
	return *this;
}
HasPtr::~HasPtr() 
{
	delete ps;
}
inline 
void swap(HasPtr &lhp, HasPtr &rhp)
{
	using std::swap;
	swap(lhp.ps, rhp.ps);//交换指针而不是string数据
	swap(lhp.i, rhp.i);
	cout << "swap()" << endl;
}

严重性 代码 说明 项目 文件 行 禁止显示状态
错误 LNK2019 无法解析的外部符号 “public: void __thiscall HasPtr::swap(class HasPtr &,class HasPtr &)” (?swap@HasPtr@@QAEXAAV1@0@Z),该符号在函数 “public: class HasPtr & __thiscall HasPtr::operator=(class HasPtr)” (??4HasPtr@@QAEAAV0@V0@@Z) 中被引用 copy_control_13 D:\vs2017_wenjian\copy_control_13\copy_control_13\copy_control_13.obj 1

错误列表

swap为普通函数,但在12行被错误的再次声明为成员函数。

anyShare分享到: