首页 > 解决方案 > 将地址分配给本地指针后,公共对象的变量消失

问题描述

我有一个名为“Azimuth azimuth(..)”的公共对象。我想将此对象交给另一个名为“Scanner scan(azimuth)”的对象,这样扫描对象就可以轻松使用方位角对象。“scanner”的构造函数将方位角对象的地址保存到一个指针中。扫描对象调用类似 scan.scanRoom() 的函数。方位角对象可以访问,但分配给它的变量是无效的(极高的值)。这是什么原因造成的?我应该如何解决这个问题?

编码:

主要的:

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

扫描角度:

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());
}

调试器的一些图片:

主要的价值观

在函数中调用时的值

感谢您的帮助和时间!

标签: c++pointersarduino

解决方案


ScanAngles通过值将对象传递给构造函数,因此将对象复制到临时值中,存储指向这些临时值的指针是未定义的行为。

您应该通过引用传递:

ScanAngles(Sensor& sensor , Azimuth& azimuth, Elevation& elevation)

推荐阅读