-1

我知道有很多关于这个的问题,但我不明白 D:对不起,我是新手,有些东西我还是不明白......这是作业,我需要为计时器设置闹钟的地方,突然出现了这个错误(我在学校的电脑上工作时它不存在),我不知道如何解决,所以请帮助我!这是我的代码:

#include "stdafx.h"
#include <iostream>
using namespace std;

class Display {
public:
    Display(int lim);
    void Increment();
    void SetValue(int val);
    int GetValue();
    void Show();
    int GetLimit();

private:
    int limit, value;
};

class Timer {
public:
    Timer();
    void Increment();
    void Set();
    void SetAlarm();
    void Show();
    void ShowAlarm();

private:
    Display hours, minutes, seconds, alarmH, alarmM, alarmS;
};

Display::Display(int lim)  {
    value=0;
    limit=lim;    }

void Display::Increment()  {
    value++;
    if (value==limit)
        value=0;   }

void Display::SetValue(int val)   {
    if (val<0)
        val=-val;
    value=(val%limit);   }

int Display::GetValue()  {
    return value;   }

void Display::Show()  {
    if (value<10)
        cout<<"0";
    cout<<value;  }

int Display::GetLimit() {
    return limit;  }

Timer::Timer():hours(24), minutes(60), seconds(60) {
}

void Timer::Increment()  {
    seconds.Increment();
    if(seconds.GetValue()==0) {
        minutes.Increment();
        if(minutes.GetValue()==0)
            hours.Increment();} }

void Timer::Show()  {
    hours.Show();
    cout<<':';
    minutes.Show();
    cout<<':';
    seconds.Show();  }

void Timer::ShowAlarm()  {
    alarmH.Show();
    cout<<':';
    alarmM.Show();
    cout<<':';
    alarmS.Show();  }

void Timer::Set()  {
    int setting;
    cout<<"Poner horas a que valor?\n";
    cout<<"Ingresa un entero entre 0 y "; cout<<hours.GetLimit()<<": ";
    cin>>setting;
    hours.SetValue(setting);
    cout<<"Poner minutos a que valor?\n";
    cout<<"Ingresa un entero entre 0 y "; cout<<minutes.GetLimit()<<": ";
    cin>>setting;
    minutes.SetValue(setting);
    cout<<"Poner segundos a que valor?\n";
    cout<<"Ingresa un entero entre 0 y "; cout<<seconds.GetLimit()<<": ";
    cin>>setting;
    seconds.SetValue(setting);    }

void Timer::SetAlarm()  {
    int setting;
    cout<<"Poner horas a que valor?\n";
    cout<<"Ingresa un entero entre 0 y "; cout<<hours.GetLimit()<<": ";
    cin>>setting;
    alarmH.SetValue(setting);
    cout<<"Poner minutos a que valor?\n";
    cout<<"Ingresa un entero entre 0 y "; cout<<minutes.GetLimit()<<": ";
    cin>>setting;
    alarmM.SetValue(setting);
    cout<<"Poner segundos a que valor?\n";
    cout<<"Ingresa un entero entre 0 y "; cout<<seconds.GetLimit()<<": ";
    cin>>setting;
    alarmS.SetValue(setting); }

void main()  {
    Timer t;
    cout<<"Aqui esta el valor incial del timer: ";
    t.Show();
    cout<<"\n\n";
    t.Set();
    cout<<"Aqui estan los nuevos valores: ";
    t.Show();
    cout<<"\n\n";
    cout<<"Lo corremos por 10 segundos...\n";
    for (int i=0;i<=10;i++)  {
        t.Increment();
        t.Show();
        cout<<'\n';    }
}
4

1 回答 1

4

您的 Timer 类将 Display 对象作为数据成员,并且 Timer 的构造函数没有显式构造所有这些对象(AlarmH、AlarmM、AlarmS)。因此,编译器尝试使用 Display 的默认构造函数来构造它们,但没有。这是因为您为 Display 提供了一个(非默认)构造函数,因此编译器不会自动为您生成默认构造函数(如果您根本没有为 Display 提供任何构造函数,它会这样做)。

解决方案:为 Display 显式提供您自己的默认构造函数。

宣言:

class Display {
public:
    Display(); // Default constructor
    Display(int lim);
    void Increment();
    void SetValue(int val);
    int GetValue();
    void Show();
    int GetLimit();

private:
    int limit, value;
};

定义:

Display::Display(){} // Default constructor

Display::Display(int lim)  {
    value=0;
    limit=lim;    }

// etc.
于 2013-03-04T01:43:45.530 回答