[英]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.