Я пишу некоторый код для Arduino IDE и сталкиваюсь с проблемой, когда ссылка, являющаяся членом класса, кажется, теряет / меняет свое значение при вызове функций.
MyStream определяется как extern в MyStream. cpp и наследуется от Stream.
В приведенном ниже коде ссылки кажутся равными в конструкторе, но не в foo ()! Не могу понять, что происходит
StreamProvider.h
class StreamProvider {
private:
Stream& stream;
public:
StreamProvider(Stream&);
size_t foo(const char*);
};
StreamProvider. cpp
StreamProvider::StreamProvider(Stream& s)
: stream(s)
{
Serial.printf("\nMyStream %x", &MyStream);
Serial.printf("\nStream %x", &stream);
}
size_t StreamProvider::foo(const char* buf) {
Serial.printf("\nMyStream %x", &MyStream);
Serial.printf("\nStream %x", &stream);
}
MyStream.h
class _MyStream: public Stream {
size_t write(uint8_t);
int available();
int read();
int peek();
};
extern _MyStream MyStream;
MyStream. cpp
size_t _MyStream::write(uint8_t) {
return 0;
}
int _MyStream::available() {
return 0;
}
int _MyStream::read() {
return 0;
}
int _MyStream::peek() {
return 0;
}
_MyStream MyStream;
Вывод
MyStream 3ffee340 /** ctor**/
Stream 3ffee340 /** ctor**/
MyStream 3ffee340 /** foo**/
Stream 3fffff6c ??? /** foo**/
Я попытался осмотреться, и это кажется необъяснимым! Конечно, ничего нет, но тогда я не уверен, что я что-то здесь упускаю ... Любая помощь приветствуется.
Спасибо