Почему у меня нет соответствующей функции для вызова - PullRequest
1 голос
/ 06 августа 2020

Я получаю следующие ошибки:

no matching function for call to 'Date::Date()'
Appointment(){

и

no matching function for call to 'Time::Time()'
Appointment(){

Appointment.h

// Appointment.h -- Class Appointment   UPDATE as needed
//
using namespace std;#include "Time.h"

#include "Date.h"

#ifndef APPOINTMENT_H
#define APPOINTMENT_H

class Appointment: public Date, public Time {
    private: int howLong;
    public: Appointment() {
        month;
        day;
        year;
        hour;
        minute;
        howLong;

    }

    virtual void print() {
        cout << howLong << " ";
    }

};

#endif

Time.h

//Time.h -- Class Time UPDATE  as needed
using namespace std;#include<iostream>

#ifndef TIME_H
#define TIME_H

class Time {
    private:
        int hour;
    int minute;
    public:
        Time(int, int) {
            hour;
            minute;
        }
    virtual void print() {
        cout << hour << " " << minute << " ";
    }

};
#endif    

Date.h

// Date.h -- Class Date    UPDATE  as needed

#ifndef DATE_H
#define DATE_H

class Date {
    private:
        int month;
    int day;
    int year;
    public:
        Date(int, int, int) {
            month;
            day;
            year;
        }
    friend bool friendTorCompare2Dates(const Date & ,
        const Date & );

};

bool friendTorCompare2Dates(const Date & Right,
    const Date & Left) {
    if (Right.month == Left.month && Right.day == Left.day)
        return true;
    else
        return false;
}

#endif    

Вот основная программа:

/*
 * Homework 4  -- UPDATE as needed
 */

#include <iostream>
#include <fstream>
#include <iomanip>
#include <string>

#include "Appointment.h"

using namespace std;

int main() {
    int month, day, year, hour, minute, howLong;
    void callPrint(Time & TimeOrApptObject) {
        TimeOrApptObject.print();
    }
    Appointment myAppointments[19];

    ifstream HW4DataFileHandle;

    HW4DataFileHandle.open("Lab6Data.txt");
    while (!HW4DataFileHandle.eof()) {
        for (int i = 1; i < 20; i++) {
            HW4DataFileHandle >> month;
            HW4DataFileHandle >> day;
            HW4DataFileHandle >> year;
            HW4DataFileHandle >> hour;
            HW4DataFileHandle >> minute;
            HW4DataFileHandle >> howLong;
            myAppointments[i] = Appointment(month, day, year, hour, minute, howLong );
        }
        cout << "enter a month" << endl;
        cin >> month;
        cout << "enter a day" << endl;
        cin >> day;
        cout << "enter a year" << endl;
        cin >> year;
        Date myDate(month, day, year);

        cout << "Appointments for" << month << "/" << day << "/" << year << ":" << endl;

        for (int i = 0; i < 13; i++) {
            if (myAppointments[i] == Date myDate) {
                Time thisTime = myAppointments[i];
                thisDate.print();
                cout << endl;
            }
        }

    }
}

Я предположил, что Appointment.h унаследует конструкторы publi c от Date и Time и передать их собственному конструктору Appointment().

Что мне нужно изменить, чтобы он заработал? Пожалуйста, включите пример в свой ответ, мы будем очень признательны. Если у вас есть какие-либо вопросы или вы заметили что-то еще, дайте мне знать.

1 Ответ

1 голос
/ 06 августа 2020

Вы ошиблись, конструкторы в C ++ не наследуются. Вот что вам нужно сделать

Appointment::Appointment(int month, int day, int year, int hour, int minute, int howLong) : 
     Date(month, day, year), Time(hour, minute), howlong(howlong)
{
}

Если синтаксис : вам незнаком (кажется, не похож на каждый newb ie), вам нужно найти списки инициализаторов .

Вот еще кое-что, что вам нужно исправить. Неправильный конструктор Date

Date(int, int,int){   
  month;
  day;
  year;
}

, который должен быть

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

Конструктор Time неверен точно так же

Time(int, int){   
    hour;
    minute;
}

который должен be

Time(int h, int m) : hour(h), month(m)
{
}

Самое главное, что вы, кажется, делаете классную c newb ie ошибку написания кода без его тестирования. Вы обречены на провал, если не протестируете свой код по мере продвижения go. Напишите несколько строк кода, протестируйте его, чтобы убедиться, что он работает, а затем напишите еще несколько строк кода.

Как вы сейчас идете, вы получите 100 строк кода с десятком ошибок , и тогда вы полностью застрянете. Новичок не может исправить код с множественными ошибками, потому что невозможно сказать, добились ли вы прогресса или нет. Если у вас есть десять ошибок и вы исправите одну, оставшиеся девять ошибок все равно остановят работу вашего кода, поэтому как вы узнаете, идете ли вы вперед или назад.

Ошибки, которые вы сделали в своих Date и Time конструкторы должны были быть обнаружены сразу после того, как вы написали этот код. Проверяйте свой код по мере продвижения go, я не могу не подчеркнуть, насколько это важно.

...