2013-03-04 147 views
-1

我知道有很多這方面的問題,但我不明白D:對不起,我是新來的,還有一些東西, t理解......這是一個家庭作業,我需要爲計時器設置一個鬧鐘,突然出現這個錯誤(當我在學校的電腦上工作時,這個錯誤不存在),我不知道如何解決它請幫助我! 這是我的代碼:C++錯誤c2512:沒有默認的構造函數可用

#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'; } 
} 
+0

你的錯誤不可能是再清楚不過考慮到它應該指向你的錯誤行。 – Rapptz 2013-03-04 01:35:15

+2

提示:您擁有「Display」類的成員,但「Display」缺少默認構造函數。 – Rapptz 2013-03-04 01:36:24

+0

是的,它的確如此,但這沒有任何意義......它指向第61行,即: Timer :: Timer():小時(24),分鐘(60)秒(60) } 但是錯誤顯示Display沒有默認的構造函數... – Opponent019 2013-03-04 01:37:15

回答

4

您的Timer類有顯示對象的數據成員,和定時器的構造並沒有明確構建所有的人(AlarmH,AlarmM,報警)。因此,編譯器試圖使用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. 
+0

謝謝!它清除了,雖然它沒有完全修復它的Visual,現在它說: 錯誤LNK2019:無法解析的外部符號「公共:__thiscall顯示器::顯示器(void)」(?? 0Display @@ QAE @ XZ)引用在函數「public:__thiscall Timer :: Timer(void)」(?? 0Timer @@ QAE @ XZ) S: – Opponent019 2013-03-04 02:01:34

+0

@Eirikra我的回答只有一個聲明爲Display()。我已經編輯它來向你展示如何提供定義。 – JBentley 2013-03-04 02:10:17

+0

ooooooh,哈哈不知道我也必須這樣做,謝謝! :) – Opponent019 2013-03-04 03:34:19

相關問題