通过成员函数改变私有成员出错?

#include <iostream>
#include<string>
#include<iostream>

using namespace std;

class Person
{
private:
	string mstrName;
	string mstrAdd;

public:
	Person() :mstrName(""), mstrAdd("") {}
	Person(const string &_strName, const string&_strAdd = " ") :mstrName(_strName), mstrAdd(_strAdd) {}
	Person(istream&is) { read(is, *this); }
//---------------------------------------------------
	string getName()const
	{
		return mstrName;
	}

	string getAdd()const
	{
		return mstrAdd;
	}

};
//----------------------------------------------------
void read(istream &is, Person &person)
{
	is >> person.getName() >> person.getAdd();
}

void print(Person &person)
{
	cout << person.getName() << " " << person.getAdd();
}
int main()
{

}

加上前置声明

#include<iostream>
#include<string>
#include<iostream>

using namespace std;

class Person;
void read(istream &is, Person &person);
void print(Person &person);

class Person
{
private:
	string mstrName;
	string mstrAdd;

public:
	Person() :mstrName(""), mstrAdd("") {}
	Person(const string &_strName, const string&_strAdd = " ") :mstrName(_strName), mstrAdd(_strAdd) {}
	Person(istream&is) { read(is, *this); }
	//---------------------------------------------------
	string getName()const
	{
		return mstrName;
	}

	string getAdd()const
	{
		return mstrAdd;
	}

};
//----------------------------------------------------
void read(istream &is, Person &person)
{
	is >> person.getName() >> person.getAdd();
}

void print(Person &person)
{
	cout << person.getName() << " " << person.getAdd();
}
int main()
{
	return 0;
}