Состав класса - невозможно преобразовать из int в класс

0

Я изучаю состав классов, но мне сложно понять, как работает синтаксис. У меня есть два класса: "Время и дата", а "Дата" - объект "Время". Я не могу заставить конструктор Date работать правильно - есть ошибка компилятора с указанием "аргумент по умолчанию: невозможно преобразовать из" int "в" время ", и я не уверен, как правильно настроить это. передать значение по умолчанию (0, 0, 0) объекту Time.

Здесь мои заголовки двух классов. Ошибка появляется в строке определения конструктора даты.

Заголовок заголовка:

#ifndef DATE_H
#define DATE_H

#include "Time.h"

class Date 
{
public:
   static const unsigned int monthsPerYear = 12; // months in a year
   Date( int = 1, int = 1, int = 1900, Time = (0, 0, 0)); // <- ERROR with this line
   ~Date(); // provided to confirm destruction order
   void print() const; // print date in month/day/year format
   void tick();      // function that increments seconds by 1.
   void increaseADay(); // increases the day by one
private:
   unsigned int month; // 1-12 (January-December)
   unsigned int day; // 1-31 based on month
   unsigned int year; // any year
   Time time;  // private Time object - class composition
   // utility function to check if day is proper for month and year
   unsigned int checkDay( int ); 
}; // end class Date

#endif

Заголовок времени:

#ifndef TIME_H
#define TIME_H

// Time class definition
class Time 
{
public:
   explicit Time( int = 0, int = 0, int = 0 ); // default constructor
   ~Time();  // destructor
   // set functions
   void setTime( int, int, int ); // set hour, minute, second
   void setHour( int ); // set hour (after validation)
   void setMinute( int ); // set minute (after validation)
   void setSecond( int ); // set second (after validation)

   // get functions
   unsigned int getHour() const; // return hour
   unsigned int getMinute() const; // return minute
   unsigned int getSecond() const; // return second

   void printUniversal() const; // output time in universal-time format
   void printStandard() const; // output time in standard-time format
private:
   unsigned int hour; // 0 - 23 (24-hour clock format)
   unsigned int minute; // 0 - 59
   unsigned int second; // 0 - 59
}; // end class Time

#endif

В моем файле реализации Date я не уверен, как работать с конструктором Time, и это наиболее вероятно, где моя ошибка. Я написал свой конструктор Date следующим образом:

Date::Date( int mn, int dy, int yr, Time time)
{
    // some validation code
}

И мой конструктор Time выглядит так:

Time::Time( int hour, int minute, int second ) 
{ 
    // some validation code
}
  • 2
    Date( int a = 1, int b = 1, int c = 1900, Time d = Time(0, 0, 0))
  • 1
    ... или Date( int = 1, int = 1, int = 1900, Time = Time()); , так как у вас есть множество аргументов по умолчанию для вашего конструктора Time .
Теги:
constructor
composition

1 ответ

3
Лучший ответ

Try Date( int = 1, int = 1, int = 1900, Time = Time(0, 0, 0));

Синтаксис (0,0,0) - это просто список целых чисел, разделенных запятыми, окруженный скобками, а не объектом Time.

Поскольку конструктор по умолчанию такой же, как и предоставленный вами список аргументов, вы также можете сделать это Date( int = 1, int = 1, int = 1900, Time = Time());

  • 0
    Ах! Спасибо, это имеет смысл сейчас.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню