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

时间:2014-08-28 13:58:40

标签: c++ inheritance

我正在使用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:错误:','令牌之前的声明中的无效类型    class 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){

1 个答案:

答案 0 :(得分:0)

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

class CUSB : public HardwareSerial {

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

    [..]
};