Почему я получаю необъявленную ошибку идентификатора в моем коде С++?

Итак, нам поручили в школе создать классное время. Они хотят, чтобы мы разделили класс с файлом заголовка time.h, файлом cpp time.cpp и файлом cpp main.cpp. У меня есть следующий код, но по какой-то причине я продолжаю получать ошибку «необъявленный идентификатор». Все 3 файла включены в мой проект прямо сейчас.

Вот код:

время.ч

class time
{
private:
    int hours;
    int minutes;
    int seconds;
public:
    time();
    time(int sec);
    time(int h, int min, int sec);
    int getTime();
    void setHours(int h);
    void setMinutes(int min);
    void setSeconds(int sec);
    bool equals(time t);
    void addTime(time t);
    void printTime();
    void normalize();

};

время.cpp

#include "time.h"
#include <iostream>
#include <iomanip>

using namespace std;

time::time()
{}
time::time(int sec)
{}
time::time(int h, int min, int sec)
{}
int time::getTime()
{
    return (hours * 60 * 60) + (minutes * 60) + seconds;
}
void time::setHours(int h)
{
    hours = h;
}
void time::setMinutes(int min)
{
    minutes = min;
}
void time::setSeconds(int sec)
{
    seconds = sec;
}
bool time::equals(time t)
{
    if (hours == t.hours && minutes == t.minutes && seconds == t.seconds)
        return true;
    else return false;
}
void time::addTime(time t)
{
    hours += t.hours;
    minutes += t.minutes;
    seconds += t.seconds;
}
void time::printTime()
{
    cout << setfill('0') << setw(2) << hours
        << ":" << setfill('0') << setw(2) << minutes
        << ":" << setfill('0') << setw(2) << seconds;
}
void time::normalize()
{
    seconds %= 60;
    minutes = minutes + (seconds / 60);
    hours = hours + (minutes / 60);
    minutes = minutes % 60;
}

main.cpp

#include "time.h"
#include <iostream>
#include <iomanip>

using namespace std;

int main()
{
    time time1;
    int seconds1;
    cout << "Enter the amount of seconds: ";
    cin >> seconds1;
    time time2(seconds1);
    int hours2, minutes2, seconds2;
    cout << "Enter the amount of hours: ";
    cin >> hours2;
    cout << "Enter the amount of muinutes: ";
    cin >> minutes2;
    cout << "Enter the amount of seconds: ";
    cin >> seconds2;
    time time3(hours2, minutes2, seconds2);
    time1.equals(time2);

}

person Joel Bastien    schedule 28.11.2019    source источник
comment
Включите полное сообщение об ошибке, пожалуйста.   -  person Richard Critten    schedule 28.11.2019
comment
как вы его компилируете?   -  person 463035818_is_not_a_number    schedule 28.11.2019
comment
для какого идентификатора?   -  person B. Go    schedule 28.11.2019


Ответы (1)


Компилируя данный код, я получаю целую кучу сообщений об ошибках, наиболее показательным из которых является

warning: statement is a reference, not call, to function 'time'
     time time1;
          ^

Это приводит к тому, что time1 сообщается как не объявленный позже, потому что это не так.

Стандартная библиотека содержит заголовок time.h и функцию time.. Чтобы гарантировать, что программа включает правильный time.h и использует правильный time, я переименовал заголовок в mytime.h, а класс time в mytime. Все ошибки исчезли (осталось несколько предупреждений о неиспользуемых параметрах), как только была устранена возможность двусмысленности.

Я рекомендую использовать что-то менее банальное, чем mytime, но не стесняйтесь использовать все, что пожелаете, главное, чтобы имя было описательным и больше не возникало коллизий.

person user4581301    schedule 28.11.2019