历史上的今天
返回首页

历史上的今天

今天是:2025年03月11日(星期二)

正在发生

2020年03月11日 | STM32开发笔记72: 使用命名空间解决类名冲突问题

2020-03-11 来源:eefocus

单片机型号:STM32L053R8T6


在程序设计中,使用了两个类,这两个类都有引脚定义并同名,程序如下:


#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

#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

当程序中同时包含这两个头文件时,由于CM0和CM1在两个类中同名,导致编译错误。


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


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


可以采取下述方法加入命名空间:


namespace e32_433t30s

{

class CM0:public CIO_Output

{

public:

CM0(void);

};

 

class CM1:public CIO_Output

{

public:

CM1(void);

};

}


加入命名空间后,采取下述方法进行对象的声明:


e32_433t30s::CM0 M0;

e32_433t30s::CM1 M1;

采取下述方法实现构造函数:


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两个类,不再冲突。

推荐阅读

史海拾趣

Eby Electro Inc公司的发展小趣事

Eby Electro Inc公司的创始人李明,是一位对电子技术充满热情的工程师。在20世纪90年代初,他看到了电子行业的巨大潜力和未来发展趋势,于是决定创立自己的公司。起初,公司只有几名员工,主要业务是设计和制造电子零部件。李明凭借其过硬的技术能力和对市场的敏锐洞察,带领公司逐步打开了市场。他坚持质量第一的原则,赢得了客户的信任。随着业务的拓展,Eby Electro Inc逐渐在电子行业中崭露头角。

ECS公司的发展小趣事

ECS公司成立于XXXX年,由一群热衷于云计算技术的工程师创立。在创立初期,公司就明确了以提供高效、弹性的云服务为目标。他们深入研究了虚拟化技术、自动化管理等关键技术,成功推出了ECS服务,为客户提供按需分配的计算资源。这一创新的服务模式迅速吸引了众多客户的关注,ECS公司开始在云服务市场崭露头角。

Control Sciences Inc公司的发展小趣事

Control Sciences Inc深知人才是企业发展的核心。因此,公司一直注重人才培养和引进。公司不仅设立了专门的研发机构,吸引了大批优秀的科研人才,还定期组织员工培训和交流活动,提高团队的整体素质。这些措施使得Control Sciences Inc的团队越来越强大,为公司的发展提供了有力的人才保障。

广东奥科公司的发展小趣事

在国内市场取得一定成绩后,广东奥科公司开始积极拓展国际市场。公司参加了多个国际电子展会,与国际知名企业建立了合作关系,成功将产品打入国际市场。同时,广东奥科公司还注重品牌建设,通过提升产品质量和服务水平,逐渐树立了良好的品牌形象。这些努力使得广东奥科公司在国际市场上也获得了广泛的认可和好评。

BLT Circuit Services公司的发展小趣事

品质一直是BLT Circuit Services公司的核心竞争力。公司注重品质管理,建立了严格的质量控制体系,从原材料采购到生产过程中的每一个环节都进行严格把关。正是这种对品质的执着追求,使得BLT Circuit Services的产品在行业内赢得了良好的口碑,为公司赢得了大量的忠实客户。

FINECHIPS公司的发展小趣事

面对全球电子行业的激烈竞争,FINECHIPS公司意识到供应链优化的重要性。公司积极调整供应链策略,与全球领先的半导体制造商和原材料供应商建立长期稳定的合作关系,确保原材料的稳定供应和成本控制。同时,FINECHIPS还在全球范围内设立生产基地和研发中心,实现本地化生产和快速响应市场需求,进一步提升了公司的全球竞争力。

问答坊 | AI 解惑

汽车导航系统的DC/DC转换器选择指南

汽车环境的宽工作电压要求、大瞬变电压以及大温度漂移等因素共同作用下,电子系统面临着严酷的条件,本文介绍如何在性能要求变得愈加苛刻的条件下,设计多个电源电压以满足汽车电子系统不同部分的要求。        ...…

查看全部问答>

编译问题解决

Can\'t insert Symbol into Block Design File filename because the Symbol represents the current Block Design File…

查看全部问答>

贴片电阻电容功率与尺寸对应表

贴片电阻电容功率与尺寸对应表 电阻封装尺寸与功率关系,通常来说: 0201 1/20W 0402 1/16W 0603 1/10W 0805 1/8W 1206 1/4W 电容电阻外形尺寸与封装的对应关系是: 0402=1.0x0.5 0603=1.6x0.8 0805=2.0x1.2 1206=3.2x1.6 1210=3.2x2.5 1 ...…

查看全部问答>

大功率开关电源中功率MOSFET的驱动技术

功率MOSFET具有导通电阻低、负载电流大的优点,因而非常适合用作开关电源(switch-mode power supplies,SMPS)的整流组件,不过,在选用MOSFET时有一些注意事项。    功率MOSFET和双极型晶体管不同,它的栅极电容比较大,在导通之前要 ...…

查看全部问答>

wi-fi的设置问题

我开发板上有一个wi-fi模块,经常在不同的无线局域网中使用,每次都需要手工设置,有没有办法用代码来完成无线网络的设置呢(无线网络没加密,或固定的一个密码)?…

查看全部问答>

单片机延时问题

小弟初学单片机,现在碰到一个现象,  当我加入延时程序后(控制控制LED亮灭),  单片机各管脚都变得很迟钝,貌似受延时程序影响,  我将延时程序删除,又恢复正常,  估计程序设计上不合理    ...…

查看全部问答>

关与ADuC7026和7028的问题

先前用keil编了一小段7026的C语言代码,想问下各位高手,如果要把此代码移植到7028下,需要作哪些调整???…

查看全部问答>

有偿寻找wince高手

目前手头有个项目使用omap3530做了一个显示器,采用wince系统,使用的是广州英码的核心板,本来厂家给定制内核但是不知为什么系统总是不稳定,现在想找一个熟悉wince的高手(要求人在北京)帮忙搞清楚什么原因,或者重新裁剪一下bsp,系统功能很简 ...…

查看全部问答>

atmega16单片机 自身AD问题

近期用atmega16 自身的ad测试陀螺仪,在测试的时候发现,当把ADC0接地时  LCD1602显示AD转换后的值为0096,接VCC=AVCC时  显示0993 这不对啊  应该是0和1023啊,这是程序 DDRA&=0xfe; PORTA&=0xfe; SF ...…

查看全部问答>

求助

有这么一个结构体static union{    struct    {        BYTE    bBroadcastSwitchToggled    : 1; & ...…

查看全部问答>