Переменные объекта publi c исчезают после назначения адреса локальному указателю - PullRequest
0 голосов
/ 23 февраля 2020

У меня есть объект publi c, который называется «Азимут азимут (..)». Я хочу передать этот объект другому объекту, который называется «Сканирование сканера (азимут)», таким образом, объект сканирования может легко использовать объект азимута. Конструктор «сканера» сохраняет адрес азимутального объекта в указателе. Сканирующий объект вызывает функцию, подобную scan.scanRoom (). Доступ к объекту азимута возможен, но присвоенные ему переменные недопустимы (чрезвычайно высокие значения). Чем это вызвано? И как мне решить эту проблему?

код:

main:

Azimuth azimuth(5,6,2000,7);
ScanAngles scan(sensor,azimuth,elevation);

ScanAngles:

class ScanAngles
{
private:
  Sensor* sensor;
  Azimuth *azimuth;
  Elevation *elevation;
public:
  ScanAngles(Sensor sensor , Azimuth azimuth, Elevation elevation)
  {
    this->sensor = &sensor;
    this->azimuth = &azimuth;
    this->elevation = &elevation;
  }

Функция:

void ScanAngles::getFullScan(int stepWidth, int stepHeight)
{
  Serial.print(this->azimuth->getRotation());
}

Некоторые картинки отладчика:

Значения в основном

Значения при вызове в функции

Спасибо за помощь и время!

1 Ответ

1 голос
/ 23 февраля 2020

Вы передаете объекты в конструктор ScanAngles по значению, поэтому объекты копируются во временные значения, хранение указателей на эти временные значения - неопределенное поведение.

Вместо этого следует передавать по ссылке:

ScanAngles(Sensor& sensor , Azimuth& azimuth, Elevation& elevation)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...