2016-02-12 150 views
-3

所以我很新的C++和我試圖做一些與類的詭計,但我得到一個非常惱人的錯誤,我不知道如何解決。沒有匹配的調用函數,煩人的C++錯誤

#include "clock.h" 
#include <iostream> 
#include <tuple> 

using namespace std; 

int secs; 
int mins; 
int hours; 

clock::clock(int secs, int mins, int hours){ 
    secs = secs; 
    mins = mins; 
    hours = hours; 
} 

void clock::tick(){ 
} 

void clock::print(){ 
    cout << "The time is: " << hours << ":" << mins << ":" << secs << endl; 
} 

,然後這裏是我的第二類

#include <iostream> 
#include "normalclock.h" 
#include "clock.h" 
#include <tuple> 

using namespace std; 

    int secs; 
    int mins; 
    int hours; 

    NormalClock::NormalClock(int secs, int mins, int hours){ 
     secs = secs; 
     mins = mins; 
     hours = hours; 
    } 

    void NormalClock::tick(){ 
     secs ++; 
     if(secs == 60){ 
      mins++; 
      secs = 0; 
     } 
     if(mins == 60){ 
      hours++; 
      mins = 0; 
     } 
     if(hours == 24) { 
      hours = 0; 
     } 
      } 

我得到的錯誤說

error: no matching function for call to 'clock::clock()' 
    NormalClock::NormalClock(int secs, int mins, int hours){ 
                 ^

是什麼一個在這種情況下怎麼辦?

+0

實際上什麼是'clock'?你提供了一個默認的構造器嗎? –

+1

顯示與這些源文件相關聯的頭文件,其中定義了類。 – Steve

回答

0

您有不屬於你的類這些全局變量:

int secs; // what is this for? this should be in clock's definition 
int mins; 
int hours; 

接下來,您嘗試設置他們的內部構造,但你最終參數分配給自己:

secs = secs; 
mins = mins; 
hours = hours; 

最後,您沒有提供這些類的定義,但它看上去像NormalClock繼承clock,它沒有默認構造函數(因爲您提供了自己的構造函數),在輸入之前請求它構造函數的主體。

它應該是這樣的:

// no variable declarations here 

NormalClock::NormalClock(int secs, int mins, int hours) : 
clock(secs, mins, hours) 
{ 
    // no assignments here, this class inherits all members from clock 
} 

瞭解member initializer lists,可能更多關於類和範圍。

0

在這種情況下做什麼?

這個問題沒有意義。開發軟件並不是你偶然發現的,你編寫代碼來執行精確的事情,並不是你只是在地面上找到它。

有一個clock類,有一個NormalClock大概(因爲你沒有提供聲明)繼承自clock

現在您爲NormalClock定義一個構造函數,其中需要3個參數,但您沒有指定應該如何構造超類clock。 編譯器正在嘗試使用默認的clock::clock()構造函數,但clock有一個用戶定義的構造函數,因此除非明確指出,否則不會生成默認構造函數。

你應該調用超構造函數,如

NormalClock::NormalClock(...) : clock(...) { 

} 

,或者提供一個默認的構造函數的時鐘,如

class clock { 
public: 
    clock() = default; 
}; 

但是這沒有什麼意義,因爲你是路過3個參數來NormalClock構造函數,大概還是應該轉發給超類的構造函數。

相關問題