Получаю ошибку о конструкторе по умолчанию, и я не знаю почему - C ++ - PullRequest
0 голосов
/ 24 мая 2011

Я просто делал простую программу на C ++ для практики, и все время получаю одну и ту же ошибку, которая говорит о том, что у меня нет конструктора по умолчанию. Тем не менее, я попытался явно объявить конструктор по умолчанию, и я все еще получаю точно такую ​​же ошибку. Я не понимаю, в чем проблема. Вот ошибка, которую я получаю от компилятора GNU C ++:

sorting.cpp: в функции int main ():
sorting.cpp: 5: ошибка: не найдена соответствующая функция для вызова Time Time :: Time () ’
sorting.h: 12: примечание: кандидаты: Time :: Time (int, int)
sorting.h: 7: примечание: время :: время (постоянное время &)

А вот код: sorting.cpp

#include "sorting.h"

int main()
{
    Time* courses = new Time[3];
    courses[1].setTime(9,30);
    courses[2].setTime(10,30);
    courses[3].setTime(12,0);
    Course this_year(3, courses);
    this_year.printTimes();
    delete [] courses;

    return 0;
}

sorting.h :
#include <<code>iostream>

using namespace std;

class Time
{
private:
        int                 hours;
        int                 minutes;
public:
                    Time();
        Time(int h = 0, int m = 0) ;
        void                setTime(int h, int m) ;
        void                printTime();
};

class Course
{
private:
        int                 period_count;
        Time*               periods;
public:
        Course(int count, ...);
        void                printTimes();
};

Time::()
{
};

Time::Time(int h, int m)
{
    hours = h;
    minutes = m;
};

void Time::setTime(int h, int m)
{
    hours = h;
    minutes = m;
    return;
};

void Time::printTime()
{
    cout << hours << ":" << minutes;
    return;
}

Course::Course(int count, Time* the_times)
{
    period_count = count;
    for (int i = 0; i < count; ++i)
    {
            periods[i] = the_times[i];
    }
}

void Course::printTimes()
{
    for(int i = 0; i < count; ++i)
    {
            periods[i].printTime();
    }
    return;
}

Ответы [ 4 ]

1 голос
/ 24 мая 2011

Time* courses = new Time[3]; создает массив из 3 объектов Time - для этого требуется, чтобы Time имел конструктор по умолчанию (поскольку объекты должны создаваться при создании массива).

Если вы не хотитесоздайте конструктор по умолчанию для Time , рассмотрите , используя std::vector, и вставьте необходимые объекты по одному в вектор.

0 голосов
/ 24 мая 2011
Time:() 
{
};

должно быть

Time::Time() 
 : hours(0), minutes(0)
{
}

или эквивалентный

0 голосов
/ 24 мая 2011

Я получил две ошибки, обе отличные от вашей.

Используя g ++ 4.4.5, переменная count не определена в Course :: printTimes (), а прототип для конструктора Course ... не соответствует объявлению. Нет проблем с конструктором Time (), хотя

0 голосов
/ 24 мая 2011

Кажется, компилятор не может идентифицировать ваш конструктор Time(int, int) как конструктор по умолчанию (который необходим при использовании new Time[3]), хотя у int есть аргументы по умолчанию. Просто попробуйте добавить конструктор по умолчанию к Time.

...