这是c++ primer 上的一道习题,题目要求给Person类添加正确的构造函数。
我下面的代码是按照参考答案敲的。
最后一个构造函数 本意是“接受istream&并从中读取对象的信息”
但是编译后出现如下错误:
“**错误(活动) E0349 没有与这些操作数匹配的 ">>" 运算符** ”
希望给出解决方案,谢谢。
代码如下:
#include <string>
#include <iostream>
using namespace std;
class Person {
private:
string strName;
string strAddress;
public:
Person() = default;
Person(const string &name, const string &add)
{
strName = name;
strAddress = add;
}
Person(istream &is) { is >> *this; } //这里编译无法通过
public:
string getName() const { return strName; }
string getAddress() const { return strAddress; }
};
is >> *this;
this是Person类型,而它没有重载流运算符
最简单的改法
Person(istream &is) { is >> this->strName; is >> strAddress; }
不修改你的构造函数的改法就是添加重载>>运算
完整代码
#include <string>
#include <iostream>
using namespace std;
class Person {
private:
string strName;
string strAddress;
public:
Person() = default;
Person(const string &name, const string &add)
{
strName = name;
strAddress = add;
}
friend istream& operator >> (istream& input, Person& p)
{
input >> p.strName;
input >> p.strAddress;
return input;
}
Person(istream &is) { is >> *this; } //这里编译无法通过
public:
string getName() const { return strName; }
string getAddress() const { return strAddress; }
};
int main()
{
return 0;
}