繁体   English   中英

每次调用 get function 时,指针指向的 object 都会更改值? C++

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM