2017-04-17 21 views
1

私は2つの基本クラスを使用しており、それらから派生クラスを派生させているコードを実行しています。私はDerivedクラスのコンストラクタの両方を呼び出しています。私はmainで引数を与えています。私がコンパイルすると、それは私に何らかのエラーを与えません。しかし、私はそれを実行しないプログラムを実行しようとすると、私は本当に混乱している! は、ここに私のコード派生クラスで使用されるベースコンストラクタで問題が発生しました

#include <iostream> 
#include<iomanip> 
using namespace std; 
class Date 
{ 
     int day; 
     int month; 
     int year; 
public: 

     Date(int d,int m,int y) 
     { 
     day=d; 
     month=m; 
     year=y; 
     } 

     void display() 
     { 
      cout<<endl<<day<<"\\"<<month<<"\\"<<year<<endl; 
     } 
     void set() 
     { 
      cout<<"Enter day :"; 
      cin>>day; 
      cout<<"Enter month :"; 
      cin>>month; 
      cout<<"Enter year :"; 
      cin>>year; 
     } 
       // sets the date members 
    }; 

class Time 
{ 
     int hour; 
     int minute; 
     int second; 
public: 

     Time(int h,int min,int s) 
     { 
      hour=h; 
      minute=min; 
      second=s; 
     } 


     void display() // displays the time 
     { 
      cout<<endl<<hour<<":"<<minute<<":"<<second<<endl; 
     } 
     void set() 
     { 
      cout<<"Enter hour :"; 
      cin>>hour; 
      cout<<"Enter minute :"; 
      cin>>minute; 
      cout<<"Enter seconds :"; 
      cin>>second; 
     } 
       // sets the time members 
    }; 

class DateAndTime : public Date, public Time 
{ 
     int digital; 
public: 

    DateAndTime(int a,int b,int c,int d,int e,int f): 
    Date(a,b,c),Time(d,e,f) 
    { 
    } 


    void set() 
    { 
     Date:set(); 
     Time:set(); 
    } 
    void display() 
     { 
     Date:display(); 
     Time:display(); 
     } 
      // prints date and time 
    }; 
int main() 
{ 
    DateAndTime Watch(17,02,1999,03,36,56); 
    Watch.display(); 
    Watch.set(); 
    Watch.display(); 
    return 0; 
} 
+2

実際のエラーを投稿してください。 – AndyG

+3

あなたは 'Time :: set();'を書くつもりでしたか? – AndyG

+0

これはエラーなしでコンパイルするとは信じられません。どのようにコンパイルしますか?あなたはコマンドラインとどんな出力が発生しても提供できますか? '-Wall'のようなニックピッキングスイッチを追加することがあります。あなたは簡単なプログラムで同じコンパイル方法を使用できますか?例えば。典型的な "Hello World"です。 – Yunnosch

答えて

4

機能

void set() 
{ 
    Date:set(); 
    Time:set(); 
} 

が間違っているが、それはラベルとしてDate:Time:を扱うため、コンパイラは文句を言わないんです。あなたがラベルと関数呼び出しを分離した場合、関数は次のとおりです。

void set() 
{ 
    Date::set(); 
    Time::set(); 
} 

あなたが同様にdisplayを更新する必要があります:あなたが使用する必要が

void set() 
{ 
    Date: // Unused label. 
     set(); // Calls the function again, leading to infinite recursion 
       // and stack overflow. 
    Time: // Unused label. 
     set(); // The function never gets here. 
} 

。使用:

void display() 
{ 
    Date::display(); 
    Time::display(); 
} 
+0

本当にありがとうございました! – Zaina

+0

@ Zaina、よろしくお願いします。 –

+0

@ Zainaお願いします。この答えがあなたのニーズに合っていれば、答えを受け入れることを検討してください。 –

関連する問題