Ссылочная переменная C ++ ведет себя непоследовательно - PullRequest
0 голосов
/ 17 апреля 2020

Я пишу некоторый код для 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**/

Я попытался осмотреться, и это кажется необъяснимым! Конечно, ничего нет, но тогда я не уверен, что я что-то здесь упускаю ... Любая помощь приветствуется.

Спасибо

...