请各位大虾指点……
// person.h
#include <iostream>
using namespace std;
///////////////////////////////////////////////////////////
// BloodGroup class
class BloodGroup {
friend ostream& operator << ( ostream &, const BloodGroup & );
public:
static BloodGroup O;
static BloodGroup A;
static BloodGroup B;
static BloodGroup AB;
static BloodGroup _values[4];
private:
int _code;
private:
BloodGroup( int code ) {
_code = code;
}
public:
BloodGroup() { };
int getCode( void ) {
return _code;
}
static BloodGroup code( int arg ) {
return _values[arg];
}
};
BloodGroup BloodGroup::O(0);
BloodGroup BloodGroup::A(1);
BloodGroup BloodGroup::B(2);
BloodGroup BloodGroup::AB(3);
BloodGroup BloodGroup::_values[4] = { O, A, B, AB };
ostream& operator << (ostream& os, const BloodGroup& bld)
{
os << "'";
switch (bld._code) { // 此处报错!!!
case 0: os << "O";
case 1: os << "A";
case 2: os << "B";
case 3: os << "AB";
}
os << "'";
return os;
}
///////////////////////////////////////////////////////////
// Person class
//class BloodGroup; // forward declaration
class Person {
private:
BloodGroup _bloodGroup;
public:
Person( BloodGroup bloodGroup ) {
_bloodGroup = bloodGroup;
}
BloodGroup getBloodGroup( void ) {
return _bloodGroup;
}
void setBloodGroup( BloodGroup arg ) {
_bloodGroup = arg;
}
};
// client.cpp
#include "person.h"
int main(int argc, char* argv[])
{
printf("Hello World!\n");
///////////////////////////////////////////////////////////
// 以下为 Person 类的测试
Person *thePerson = new Person( BloodGroup::A );
Person anOtherPerson( thePerson->getBloodGroup() );
thePerson->setBloodGroup( BloodGroup::AB );
cout << thePerson->getBloodGroup().getCode() << "\n"
<< anOtherPerson.getBloodGroup().getCode() << endl;
///////////////////////////////////////////////////////////
return 0;
}
问题1、在person.h中,若把Person类代码放到BloodGroup前面,加上forward declaration,编译时报错,为何???
问题2、重载操作符<<中,编译报错:error C2248: '_code' : cannot access private member declared in class 'BloodGroup'。为什么不能访问了呢?
困惑,请各位大虾指点^-^