![]() |
#2
weble2010-08-15 01:28
回复 楼主 zhoufeng1988
|
具体描述:在ZhouFengCpp命名空间下有一个sex枚举,它有两个枚举成员,分别是MALE, FEMALE。
而我在调用这个枚举的时候出现了一个问题,GCC编译器说,找不到此枚举成员。但是如果我把整个命名空间引用进去,就没有问题了。
所以请教一下在不引用整个命名空间的情况下,怎么去引用枚举成员。以下是这个简单Demo的源码。大家帮忙看一下,在此谢过了。
person.h文件

#ifndef PERSON_H
#define PERSON_H
namespace ZhouFengCpp
{
extern const char * HEADER;
typedef unsigned int uint;
enum sex
{
/*
* 男
*/
MALE,
/*
* 女
*/
FEMALE
};
class person
{
public:
/*
* Contructors
*/
person()
: _name( ""), _age( 0), _sex( MALE)
{}
person( char * name, uint age, sex psex)
: _name( name), _age( age), _sex( psex)
{}
char * get_name() const;
uint get_age() const;
void set_name( char *);
void set_age( uint);
void show() const;
void operator=( char *);
void operator=( uint);
private:
char * _name;
uint _age;
sex _sex;
};
}
#endif
person.cpp文件#define PERSON_H
namespace ZhouFengCpp
{
extern const char * HEADER;
typedef unsigned int uint;
enum sex
{
/*
* 男
*/
MALE,
/*
* 女
*/
FEMALE
};
class person
{
public:
/*
* Contructors
*/
person()
: _name( ""), _age( 0), _sex( MALE)
{}
person( char * name, uint age, sex psex)
: _name( name), _age( age), _sex( psex)
{}
char * get_name() const;
uint get_age() const;
void set_name( char *);
void set_age( uint);
void show() const;
void operator=( char *);
void operator=( uint);
private:
char * _name;
uint _age;
sex _sex;
};
}
#endif

#include <iostream>
#include "person.h"
using std::cout;
using std::endl;
namespace ZhouFengCpp
{
/*using ZhouFeng.Cpp::uint;
using ZhouFeng.Cpp:person;
using ZhouFeng.Cpp::sex;
*/
const char * HEADER = "--------------------------------------------\n";
inline char * person::get_name() const
{
return _name;
}
inline ZhouFengCpp::uint person::get_age() const
{
return _age;
}
inline void person::set_name( char * pname)
{
_name = pname;
}
inline void person::set_age( uint page)
{
_age = page;
}
void person::show() const
{
cout << HEADER;
cout << "Name: " << _name << endl;
cout << "Age: " << _age << endl;
cout << "Sex: " << (_sex == MALE ? "MALE":"FEMALE") << endl;
cout << HEADER;
}
void person::operator= ( char * pname)
{
_name = pname;
}
void person::operator= ( uint page)
{
_age = page;
}
}
测试驱动#include "person.h"
using std::cout;
using std::endl;
namespace ZhouFengCpp
{
/*using ZhouFeng.Cpp::uint;
using ZhouFeng.Cpp:person;
using ZhouFeng.Cpp::sex;
*/
const char * HEADER = "--------------------------------------------\n";
inline char * person::get_name() const
{
return _name;
}
inline ZhouFengCpp::uint person::get_age() const
{
return _age;
}
inline void person::set_name( char * pname)
{
_name = pname;
}
inline void person::set_age( uint page)
{
_age = page;
}
void person::show() const
{
cout << HEADER;
cout << "Name: " << _name << endl;
cout << "Age: " << _age << endl;
cout << "Sex: " << (_sex == MALE ? "MALE":"FEMALE") << endl;
cout << HEADER;
}
void person::operator= ( char * pname)
{
_name = pname;
}
void person::operator= ( uint page)
{
_age = page;
}
}

#include <iostream>
#include "person.h"
using std::cout;
using std::endl;
/*using ZhouFengCpp::person;
using ZhouFengCpp::sex;
using ZhouFengCpp::HEADER;*/
using namespace ZhouFengCpp;
int main( int argc, char *argv[])
{
person me( "ZhouFeng", 22, MALE);
person lily( "ZhaoLiLi", 21, FEMALE);
me.show();
lily.show();
cout << HEADER;
cout << "\tChange.." << endl;
cout << HEADER;
me = "周锋";
lily = "赵丽丽";
me.show();
lily.show();
}
#include "person.h"
using std::cout;
using std::endl;
/*using ZhouFengCpp::person;
using ZhouFengCpp::sex;
using ZhouFengCpp::HEADER;*/
using namespace ZhouFengCpp;
int main( int argc, char *argv[])
{
person me( "ZhouFeng", 22, MALE);
person lily( "ZhaoLiLi", 21, FEMALE);
me.show();
lily.show();
cout << HEADER;
cout << "\tChange.." << endl;
cout << HEADER;
me = "周锋";
lily = "赵丽丽";
me.show();
lily.show();
}
[ 本帖最后由 zhoufeng1988 于 2010-8-14 23:30 编辑 ]