C++入门问题(输入流)

这是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;
}