繁体   English   中英

在构造函数中继承带有引用的类

[英]Inheriting a class with references in the constructor

我正在使用Arduino,我尝试创建一个自定义的串行类,以过滤出特殊数据。 因此,我想继承HardwareSerial来访问其受保护的RX缓冲区。

我可以想象三种解决方案:继承类以访问此缓冲区

在我的班级中创建此类的实例,但随后我不知道如何访问受保护的缓冲区

复制整个类或仅继承几个函数即可修改所有函数。 可能是最好的解决方案。

工作原理:

.h:
extern HardwareSerial Serialk;
.cpp:
HardwareSerial Serialk(&UBRR0H, &UBRR0L, &UCSR0A, &UCSR0B, &UCSR0C, &UDR0);
Serialk._tx_udr_empty_irq();

但是我不能继承这样的类:

class CUSB : public HardwareSerial (&UBRRH, &UBRRL, &UCSRA, &UCSRB, &UCSRC, &UDR){
[..] }

这会引发如下错误:

D:\\ Arduino \\ sketchbook \\ libraries \\ USB / USB.h:36:50:错误:在','令牌类CUSB之前的声明中类型无效:public HardwareSerial(&UBRRH,&UBRRL,&UCSRA,&UCSRB,&UCSRC,&UDR){^ D:\\ Arduino \\ sketchbook \\ libraries \\ USB / USB.h:36:50:错误:已将'UBRRL'声明为参考但未初始化D:\\ Arduino \\ sketchbook \\ libraries \\ USB / USB.h:36:53:错误:'UCSRA'被声明为引用,但未初始化为类CUSB:公共HardwareSerial(&UBRRH,&UBRRL,&UCSRA,&UCSRB,&UCSRC,&UDR){

您不应尝试在将其声明为基类的地方实例化HardwareSerial对象。 这应该在您自己的对象的构造函数中完成。

class CUSB : public HardwareSerial {

    // Constructor method
    CUSB() : HardWareserial( /* your variables you wish to pass on to base class. */ ) {
        /* Initialize your own class. */
    }

    [..]
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM