2016-08-14 14 views
0

プログラムは動作しますが、プログラムが実行されるたびにこのエラーが発生するため、コンストラクタに何が問題なのかよく分かりません。 "警告:ベースクラス 'Alat'はここで 'Alat :: ime '[-Wuninitialized]」基本クラスからコンストラクタを呼び出す方法が間違っていると思われますが、何が問題なのかよくわかりません。本当に助けを必要としています。基本クラスと派生クラスのコンストラクタ

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

class Alat{ 
protected: 
    string ime; 
    int serBr; 
    int cena; 

public: 

    void setIme(string i); 
    string getIme(); 

    void setSerBr(int sb); 
    int getSerBr(); 

    void setCena(int c); 
    int getCena(); 

    Alat(); 
    Alat(string i, int sb, int c) 
    :ime(i), 
    serBr(sb), 
    cena(c) 
    {} 

    void info(); 


    ~Alat(); 
}; 

#include "Alat.h" 

class Rucni : public Alat{ 
protected: 
    int minGodKor; 

public:  

    Rucni():Alat(ime, serBr, cena) //I think here is problem, is it wrong called?  
    {} 

    int getminGodKor(); 
    void setminGodKor(int min); 

    void info(); 

    ~Rucni(); 

}; 
+4

あなたがしようとしています'Alat'のメンバである' ime'を使って 'Alat'を初期化しています.... –

+0

プログラムを実行するときにコンパイルするときに警告が表示されることは間違いありません。両者の違いを知ることは重要です。 –

答えて

1

子のデフォルトのコンストラクタは、親の対応する一つを呼び出すためにデフォルトの親のコンストラクタを呼び出し、パラメータで別の子のコンストラクタを作成してみましょう:

#include <string> 

using std::string; 


class Alat 
{ 
protected: 
    string ime; 
    int serBr; 
    int cena; 

public: 

    void setIme(string i) 
    { 
     ime = i; 
    } 

    string getIme() 
    { 
     return ime; 
    } 

    void setSerBr(int sb) 
    { 
     serBr = sb; 
    } 

    int getSerBr() 
    { 
     return serBr; 
    } 

    void setCena(int c) 
    { 
     cena = c; 
    } 

    int getCena() 
    { 
     return cena; 
    } 

    Alat() 
    { 
    } 

    Alat(string i, int sb, int c) : ime(i), serBr(sb), cena(c) 
    { 
    } 

    ~Alat() 
    { 
    } 
}; 


class Rucni : public Alat 
{ 
protected: 
    int minGodKor; 

public:  

    Rucni() // implicit call of the parent default constructor 
    { 
    } 

    Rucni(string i, int sb, int c) : Alat(i, sb, c) // explicit call of the corresponding parent constructor 
    { 
    } 

    int getminGodKor() 
    { 
     return minGodKor; 
    } 

    void setminGodKor(int min) 
    { 
     minGodKor = min; 
    } 

    ~Rucni() 
    { 
    } 
}; 


int main() 
{ 
    Rucni r; 

    return 0; 
} 
+0

私はAlat.cppでget/setを呼び出していましたが、それを動作させることはできませんでしたが、このように動作しました。 – Beansolder

+0

ゲッターとセッターは、オブジェクトが作成されて初期化された後に呼び出されます。コンストラクタは、メンバを目的の値に設定する目的で呼び出される最初の「メソッド」です。 – karastojko

関連する問題