2014-11-21 52 views
0

嘿,那裏的程序員,我遇到了這個問題的一個大問題!我只想創建一個繼承前一類的東西的類,但問題是在這兩個類中我都有構造函數,編譯器不會編譯這個簡單的代碼 - 它告訴我 - 10.12.2012.3.cpp:28:3 :錯誤:沒有匹配的函數調用'Monitor :: Monitor()':請忽略主要功能 - 它沒有做任何特別的事情,正弦我無法擺脫這個問題:/對不起愚蠢的問題,但我couldn 「找不到具體答案PS:我的第一篇文章在這裏:)我不能創建公共繼承類 - 構造函數C++有問題

#include <iostream> 
#include <string.h> 
using namespace std; 

class Monitor 
{ 
    protected: 

     int sifra; 

    public: 

     Monitor (int sifra1) 
     { 
      sifra = sifra1; 
     } 

}; 



class Prodaja : public Monitor 
{ 
    protected: 

     int monster;  

    public: 

     Prodaja (int monster1) 
     { 
      monster = monster1; 
     } 

}; 

int main() 
{ 
    int sifra1; 
    string firma1, model1, dobavitelj1; 
    float nabava1, cena1; 

    return 0; 
} 

回答

1

Monitor沒有一個default constructor

您必須在派生類的構造函數中調用其構造函數。這是因爲否則Prodaja實例不知道如何構建它的Monitor部分。

所以你需要

Prodaja (int monster1): Monitor(monster1) 

或定義的Monitor一個構造函數沒有參數(或具有默認參數)。

+0

因此,理論上如果我會創建一個監視器的默認構造函數,除了他第二個構造函數,我不必在派生類中調用他嗎?或者這不是一個好的做法? PS:謝謝你,我很感謝你的快速反應,它立即解決了我的問題。 – 2014-11-21 17:32:04

+0

是的,如果你有什麼叫做「默認構造函數」,請參閱答案中的鏈接,那麼將隱式地調用派生實例的構造方法,除非像上面那樣顯式調用第二個構造方法。是否好壞取決於設計。默認的構造函數需要最小化初始化,以便創建的對象處於有效且定義明確的狀態,並且可以安全地使用。 – vsoftco 2014-11-21 17:34:19