[英]The object a pointer is pointing to changes values every time a get function is called? C++
我有两节课,一节是关于燃料的,另一节是关于英里的。 每 24 英里您使用 1 燃料。 对于这个任务,我需要在我的“英里”class 中有一个指向“燃料”class 的指针,这样我们就可以让“英里”class 与“燃料”class 一起工作,而不必创建一个完整的 object“燃料”88428229在“英里”class 内。在我测试它之前一切顺利,经过一些调试后,由于某种原因,每当我在“英里”class 中调用 get function 时,燃料 882829995402888 的值似乎都发生了变化。但是,所有我正在做的是返回一个成员变量。 为什么它会改变我的燃料 object? 我也没有在其他任何地方更改指针的值,因此它应该始终指向燃料 object。
Class 说明书
#ifndef ODO_H
#define ODO_H
#include "FuelGauge.h"
class Odometer
{
private:
int currentMiles = 0;
int maxMilage = 999999;
FuelGauge* fuelObject = nullptr;
int counter = 0;
public:
Odometer(int, FuelGauge);
int getMiles();
void addMiles();
};
#endif ODO_H
Class 实施
#include "Odometer.h"
Odometer::Odometer(int currMileage, FuelGauge Gauge) {
if (currMileage >= 0 && currMileage <= maxMilage) {
currentMiles = currMileage;
}
else {
cout << "Starting mileage is invalid" << endl;
}
fuelObject = &Gauge;
}
int Odometer::getMiles() {
return currentMiles;
}
void Odometer::addMiles() {
if (currentMiles < maxMilage) {
currentMiles++;
counter++;
}
else if (currentMiles >= maxMilage) {
cout << "You have reached the max mileage ... resetting to zero!" << endl;
currentMiles = 0;
}
if (counter >= 24) {
fuelObject->useFuel();
counter = 0;
}
}
主要是,当我调用 getMiles() function 时; “fuelObject”指向的 object 的值已更改为某个随机大数。 为什么会这样?
这应该是未定义的行为。
Odometer::Odometer(int currMileage, FuelGauge Gauge) {
if (currMileage >= 0 && currMileage <= maxMilage) {
currentMiles = currMileage;
}
else {
cout << "Starting mileage is invalid" << endl;
}
fuelObject = &Gauge;
}
一旦你的构造函数完成执行,你的fuelObject
就会指向垃圾,因为参数将是 scope 中的 go 并且它是 by-val。
除此之外,我必须同意@scheff 的观点,即您看到的错误可能不是由您显示的代码引起的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.