【问题标题】:Garbage value being displayed显示的垃圾值
【发布时间】:2014-09-12 12:44:03
【问题描述】:

我正在学习课程,我在练习时偶然发现了这一点。我很困惑为什么我会得到amount 的垃圾输出,为什么会提前显示amount 的正确值也是如此。

我哪里错了?

我已经粘贴了输出。

#include<iostream>
using namespace std;

class Resort{
    float charges  ;
    int days ;
    float amount ;
    float compute() ;
public:
    void getdata();
    void disp();
};

void Resort::getdata(){
    cout<<"\nCharges : ";
    cin>>charges ;
    cout<<"\nNo of days : ";
    cin>>days ;
}

void Resort::disp(){
    cout<<"\nCharges : "<<charges
        <<"\nDays : "<<days
        <<"\nAmount : "<<compute()<<endl ;
}

float Resort::compute(){
    amount = (days*charges) ;
    cout<<amount;
}

int main(){
    Resort obj ;
    obj.getdata();
    cout<<"\n\n";
    obj.disp();
}

【问题讨论】:

  • 打开/提高编译器的警告级别。
  • 请编译所有警告和调试信息(例如g+++ -Wall -g)并学习如何使用调试器
  • 我在编译器设置上启用了 -Wall。你说的是那个@BasileStarynkevitch 吗?
  • 你也用过调试器吗?
  • 我直到现在才使用它,但我正在学习如何做到这一点:)

标签: c++ class oop object


【解决方案1】:

您没有从 compute 函数返回任何内容,但您在 disp 中输出了它的返回值 .

你可能想要这样的东西:

float Resort::compute(){
   amount = (days*charges) ;
   cout<<amount;
   return amount;
}

【讨论】:

【解决方案2】:

为了防止变量中的垃圾值,您可以为 Resort 类定义一个 构造函数,并为变量提供 默认值,这样即使您忘记处理变量的值也会显示您初始化的值,而不是垃圾值。 例如 您可以在类定义中包含这样的构造函数。

  public:
    Resort()
    {
      charges = (float)0.0 ;
      days = 0;
      amount = (float)0.0;
    }

特别是对于上面的代码,您需要在调用函数打印值之前调用计算函数。

【讨论】:

    【解决方案3】:

    disp 中,您尝试打印compute 的返回值,但您忘记在此处添加返回值。由于compute 也会打印到cout,因此您还会获得双重打印输出。

    未来的提示是始终打开尽可能多的编译器警告标志(对于g++,这是-Wall)。这样做可能会让您的编译器警告您 compute 中省略的返回值。

    【讨论】:

      猜你喜欢
      • 2013-07-10
      • 2016-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多