标题:一个关于访问命名空间下的枚举值的问题
只看楼主
zhoufeng1988
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:北京
等 级:贵宾
威 望:27
帖 子:1432
专家分:6329
注 册:2009-5-31
结帖率:100%
已结贴  问题点数:20 回复次数:6 
一个关于访问命名空间下的枚举值的问题
最近在学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 编辑 ]
搜索更多相关主题的帖子: 空间 枚举 访问 
2010-08-14 23:29
weble
Rank: 2
等 级:论坛游民
帖 子:59
专家分:83
注 册:2009-4-12
得分:5 
回复 楼主 zhoufeng1988
可以使用using声明:
using ZhouFengCpp::person;

路漫漫其修远兮,吾将上下而求索
2010-08-15 01:28
lintaoyn
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:4
帖 子:605
专家分:2489
注 册:2009-4-8
得分:5 
using ZhouFengCpp::sex;

迭代的是人,递归的是神。
2010-08-15 06:50
zhoufeng1988
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:北京
等 级:贵宾
威 望:27
帖 子:1432
专家分:6329
注 册:2009-5-31
得分:0 
回复 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();
}

2010-08-15 09:43
weble
Rank: 2
等 级:论坛游民
帖 子:59
专家分:83
注 册:2009-4-12
得分:10 
回复 4楼 zhoufeng1988
MALE是命名空间中的一个名字,所以你应该这么声明:
using ZhouFengCpp::MALE;

路漫漫其修远兮,吾将上下而求索
2010-08-15 10:13
zhoufeng1988
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:北京
等 级:贵宾
威 望:27
帖 子:1432
专家分:6329
注 册:2009-5-31
得分:0 
回复 5楼 weble
谢谢,问题解决了。
2010-08-15 10:22
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
得分:0 
足见名空间是个复杂的问题。
2010-08-15 15:13



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-315725-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.851155 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved