打印
[应用相关]

使用命名空间解决类名冲突问题

[复制链接]
872|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wakayi|  楼主 | 2019-7-4 11:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在程序设计中,使用了两个类,这两个类都有引脚定义并同名,程序如下:

#ifndef E32_400T20S_H_
#define E32_400T20S_H_

#include "io.h"
#include "mini_uart.h"

#ifdef __cplusplus
extern "C"{

class CM0:public CIO_Output
{
public:
        CM0(void);
};

class CM1:public CIO_Output
{
public:
        CM1(void);
};

class CE32_400t20s:public CMiniUART
{
public:
        CM0 M0;
        CM1 M1;
public:
        CE32_400t20s(void);
        void ReadParameter(void);
        void WriteParameter(uint8_t u8_CommunicationChannel);
        void SetMode(uint8_t u8_Mode);
        void Restart(void);
};

}
#endif
#endif


使用特权

评论回复
沙发
wakayi|  楼主 | 2019-7-4 11:24 | 只看该作者

#ifndef E32_433T30S_H_
#define E32_433T30S_H_

#include "io.h"
#include "mini_uart.h"

#ifdef __cplusplus
extern "C"{

class CM0:public CIO_Output
{
public:
        CM0(void);
};

class CM1:public CIO_Output
{
public:
        CM1(void);
};

class CE32_433T30S:public CMiniUART
{
public:
        CM0 M0;
        CM1 M1;
public:
        CE32_433T30S(void);
        void ReadParameter(void);
        void WriteParameter(uint8_t u8_CommunicationChannel);
        void SetMode(uint8_t u8_Mode);
        void Restart(void);
};

}
#endif
#endif


使用特权

评论回复
板凳
wakayi|  楼主 | 2019-7-4 11:25 | 只看该作者
当程序中同时包含这两个头文件时,由于CM0和CM1在两个类中同名,导致编译错误。

解决上述问题的方法是使用命名空间。

所谓命名空间,实际上是一种由程序设计者命名的内存区域,程序设计者可以根据需要指定一些有名字的空间域,把一些全局实体分别放在各个命名空间中,从而与其它全局实体分隔开来。


使用特权

评论回复
地板
wakayi|  楼主 | 2019-7-4 11:25 | 只看该作者
可以采取下述方法加入命名空间:

namespace e32_433t30s
{
        class CM0:public CIO_Output
        {
        public:
                CM0(void);
        };

        class CM1:public CIO_Output
        {
        public:
                CM1(void);
        };
}


使用特权

评论回复
5
wakayi|  楼主 | 2019-7-4 11:26 | 只看该作者
加入命名空间后,采取下述方法进行对象的声明:

        e32_433t30s::CM0 M0;
        e32_433t30s::CM1 M1;



使用特权

评论回复
6
wakayi|  楼主 | 2019-7-4 11:26 | 只看该作者
采取下述方法实现构造函数:

e32_433t30s::CM0::CM0(void):CIO_Output(E32_433T30S_M0_PORT, E32_433T30S_M0_PIN, low) {}
e32_433t30s::CM1::CM1(void):CIO_Output(E32_433T30S_M1_PORT, E32_433T30S_M1_PIN, low) {}

至此,就可以同时使用CE32_400t20s和CE32_433T30S两个类,不再冲突。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

85

主题

4084

帖子

1

粉丝