我发现除非在头文件本身上声明,否则某些代码将无法工作.例如,使用以下代码,调用test()时将打印"Hello World":
//Myclass.h
class Myclass {
private:
SoftwareSerial *ss;
public:
void test() {
ss = & SoftwareSerial(0,1);
ss->begin(9600);
ss->print("Hello World");;
};
};
Run Code Online (Sandbox Code Playgroud)
但是,如果我只是在标头上声明方法test()并像往常一样在单独的cpp上编码,使用完全相同的代码,它会编译但不输出任何内容:
//Myclass.cpp
void Myclass::test(){
ss = & SoftwareSerial(0,1);
ss->begin(9600);
ss->print("Hello World");
};
//this won't output anything
Run Code Online (Sandbox Code Playgroud)
这是为什么?
SoftwareSerial是一种类型.你正在指向一个临时指针,然后在暂时死亡后取消引用它.这是非法的 ; 我不知道为什么你的编译器会接受它,但我会想出一个问题并建议这并不意味着它正在做你认为的那样.它可能会破坏某些东西并导致奇怪的行为,试图合理化是愚蠢的.
代替:
//Myclass.h
class Myclass {
private:
SoftwareSerial ss;
public:
Myclass();
void test();
};
//Myclass.cpp
Myclass::Myclass() : ss(0,1) {};
void Myclass::test() {
ss.begin(9600);
ss.print("Hello World");
};
Run Code Online (Sandbox Code Playgroud)