注册 登录
编程论坛 C++教室

一个关于访问命名空间下的枚举值的问题

zhoufeng1988 发布于 2010-08-14 23:29, 2525 次点击
最近在学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;   

    };
}
#endif
person.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 编辑 ]
6 回复
#2
weble2010-08-15 01:28
回复 楼主 zhoufeng1988
可以使用using声明:
using ZhouFengCpp::person;
#3
lintaoyn2010-08-15 06:50
using ZhouFengCpp::sex;
#4
zhoufeng19882010-08-15 09:43
回复 3楼 lintaoyn
之前我尝试过以上的办法,还是出现编译错误。
程序代码:
#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();
}
只有本站会员才能查看附件,请 登录

#5
weble2010-08-15 10:13
回复 4楼 zhoufeng1988
MALE是命名空间中的一个名字,所以你应该这么声明:
using ZhouFengCpp::MALE;
#6
zhoufeng19882010-08-15 10:22
回复 5楼 weble
谢谢,问题解决了。
#7
pangding2010-08-15 15:13
足见名空间是个复杂的问题。
1