c++ - 将地址分配给本地指针后,公共对象的变量消失
问题描述
我有一个名为“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());
}
调试器的一些图片:
感谢您的帮助和时间!
解决方案
您ScanAngles
通过值将对象传递给构造函数,因此将对象复制到临时值中,存储指向这些临时值的指针是未定义的行为。
您应该通过引用传递:
ScanAngles(Sensor& sensor , Azimuth& azimuth, Elevation& elevation)
推荐阅读
- tensorflow - Tensorflow Lite 错误未定义对 `tflite::DefaultErrorReporter()' 的引用
- node.js - 是否可以使用 Sequelize 加入派生表(子查询)?
- python - 在 Python 中反向 MPL 绘图或反向 X 轴
- ios - Swift 中的 JSON 解析(iOS)
- ruby - 安装 cocoapods 时出现 SSL 验证错误
- laravel - 当我运行 npm run serve 时得到“缺少脚本:服务”
- swift - Xcode 12 和 SwiftUI:无法在此文件中预览 - 无法更新预览
- linux - Can "echo" stop skipping a line when writing to a file
- python-3.x - 如何在python中处理一个不存在的文件
- c++ - 将对象推送到 shared_ptr 的错误
队列