一个关于访问命名空间下的枚举值的问题
最近在学C++,写一些简单例子过程中呢,发现这样的一个问题。具体描述:在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; }; } #endifperson.cpp文件
程序代码:
#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 <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(); }
[ 本帖最后由 zhoufeng1988 于 2010-8-14 23:30 编辑 ]