打印

请教:c函数如何使用C++类的成员变量?有的行,有的不行

[复制链接]
2373|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
汽车电子|  楼主 | 2008-10-10 11:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  Keil  RV 编译环境。

  任务函数和中断函数都为c语法,其它函数都用C++。为什么有的任务可以引用C++类中成员变量,而有的就不行呢??

  原则上别的类是不允许直接的访问别的类的成员变量的,这样就违反了类的数据封装本性了 要访问的话就通过成员函数来访问,或者通过友元函数来访问。

  但这是在单片机系统,直接引用别的类中少量的成员变量,确实很方便。

相关帖子

沙发
汽车电子|  楼主 | 2008-10-10 11:17 | 只看该作者

所有文件均为cpp文件

使用特权

评论回复
板凳
sodwell| | 2008-10-10 11:25 | 只看该作者

re

能看见源代码吗?
有源代码的话  不行 就把代码改成C的吧
单片机的话 估计也不会调太多的类  稍微动下代码

使用特权

评论回复
地板
汽车电子|  楼主 | 2008-10-10 12:01 | 只看该作者

如:

/* $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
    UART类
*/
class            UartCls
{
public:
    UartCls(void);
    void        Init(uint32);
    uchar        puts(char *p);
    uchar        putb(uchar,uint16,uchar *p);
    void        ClearReceiveFlag(uint16);
    void        ClearTransmitFlag(void);    
    __inline    void    Interrupt(void);    
    void        TaskReceiveOK(void);
public:
    REC        Rec;
    TXD        Txd;    
    SET_CMD    SetCmd;            
private:
    uchar        *pTxd;
    uchar        GYCnt,GYFlag[3];
};

UartCls       Uart;






//      任务函数
void            TaskA(void)   __task
{
     ......
     // 这里可引用UartCls的成员变量
     if(Uart.变量)       // 
     {
         // 处理
     }
     
     // 这里不可以使用,类定义方法、变量类型是一样的
     if(其它类成员变量)
     {
     }
}

使用特权

评论回复
5
汽车电子|  楼主 | 2008-10-10 12:22 | 只看该作者

在TaskA中申明类对象也无用

使用特权

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

本版积分规则

366

主题

2057

帖子

5

粉丝