我试图通过声明以下内容使用new运算符创建全局引用
tNMEA2000 &NMEA2000=*(new tNMEA2000_stm());
在任何功能之外。
当我在任何函数之外使用tNMEA2000 &NMEA2000=*(new tNMEA2000_stm());
时,最终将其设置为NULLPTR。如果我在函数内部声明它,则它可以正常工作。
这不是实际的代码,而是简化的版本。我还没有包含实际的类定义
#include "nmea_wrapper.h" //This defines the tNMEA2000_stm class
#include "NMEA2000.h" //This defines the tNMEA2000 class that tNMEA2000_stm inherits from
tNMEA2000 &NMEA2000 = *(new tNMEA2000_stm()); //This ends up with a NULLPTR
void setup(){
tNMEA2000 &NMEA2000 = *(new tNMEA2000_stm()); //This correctly initializes the memory
}
据我了解,在全局范围内声明它应该起作用,而不是将其设置为NULLPTR。 我不确定这是否是使用newlib的怪癖,而且我似乎找不到任何文档来告诉我一种方法是否有效。