Неопределенная ссылка на методы класса, использующие Code :: Blocks

0

Исходя из мира Java/Eclipse, просто хотел нарисовать C++ и использовать Code :: Blocks.

Делал базовый класс, и у меня возникли проблемы с его реализацией в моем основном файле.

Получение "неопределенной ссылки на" Время :: Время "(int, int, int)" и неопределенные ссылочные ошибки ко всем моим методам, используемым в моем файле main.cpp.

Попробовал перестроить, попробовал повторное добавление файлов в консольный проект. Не знаю, в чем проблема. Я довольно ржавый с Code :: Blocks, поэтому, возможно, это что-то очевидное, любая помощь будет оценена по достоинству.

main.cpp

#include "Time.h"
#include <iostream>

using namespace std;

int main()
{
    //Time current();
    Time current(12,0,0);

    cout << "Current time." << endl;
    current.displayTime();

    cout << "\nSet time to 22:29:30." << endl;
    current.setTime(22,29,30);
    current.displayTime();

    cout << "\nAdd 45 minutes." << endl;
    current.addMinutes(45);
    current.displayTime();

    cout << "\nAdd 45 seconds." << endl;
    current.addSeconds(45);
    current.displayTime();

    cout << "\nAdd 1 hour." << endl;
    current.addHours(1);
    current.displayTime();

    return 0;
}

time.h

#ifndef TIME_H
#define TIME_H

class Time
{
    public:
        Time(int h, int m, int s);
        Time(int h, int m);
        Time(int h);
        Time();

        virtual ~Time();

        void setTime(int h, int m, int s);
        void setTime(int h, int m);
        void setTime(int h);

        void addHours(int h);
        void addMinutes(int m);
        void addSeconds(int s);

        void displayTime();

        int getHours();
        void setHours(int h);
        int getMinutes();
        void setMinutes(int m);
        int getSeconds();
        void setSeconds(int s);

    protected:

    private:
        int hours;
        int minutes;
        int seconds;
};

#endif // TIME_H

Time.cpp

#include "Time.h"
#include <iostream>

using namespace std;

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

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

Time::Time(int h)
{
    hours = h;
    minutes = 0;
    seconds = 0;
}

Time::Time()
{
    hours = 0;
    minutes = 0;
    seconds = 0;
}

Time::~Time()
{
    //dtor
}

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

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

Time::void setTime(int h)
{
    hours = h;
    minutes = 0;
    seconds = 0;
}

Time::void addHours(int h)
{
    hours += h;

    if (hours > 23)
    {
        hours -= 24;
    }
}

Time::void addMinutes(int m)
{
    minutes += m;

    if (minutes > 59)
    {
        addHours(minutes / 60);
        minutes %= 60;
    }
}

Time::void addSeconds(int s)
{
    seconds += s;

    if (seconds > 59)
    {
        addMinutes(seconds / 60);
        seconds %= 60;
    }
}

Time::void displayTime()
{
    if (hours < 10)
    {
        cout << "0" << hours;
    }
    else
    {
        cout << hours;
    }

    cout << ":";

    if (minutes < 10)
    {
        cout << "0" << minutes;
    }
    else
    {
        cout << minutes;
    }

    cout << ":";

    if (seconds < 10)
    {
        cout << "0" << seconds;
    }
    else
    {
        cout << seconds;
    }

    cout << endl;
}

Time::void setHours(int h)
{
    if (h >= 0 && h <= 23)
    {
        hours = h;
    }
    else
    {
        cout << "Invalid input!\n";
    }
}

Time::int getHours()
{
    return hours;
}

Time::void setMinutes(int m)
{
    if (m >= 0 && m <= 59)
    {
        minutes = m;
    }
    else
    {
        cout << "Invalid input!\n";
    }
}

Time::int getMinutes()
{
    return minutes;
}

Time::void setSeconds(int s)
{
    if (s >= 0 && s <= 59)
    {
        seconds = s;
    }
    else
    {
        cout << "Invald input!\n";
    }
}

Time::int getSeconds()
{
    return seconds;
}
Теги:
codeblocks
header-files
resource-files

1 ответ

2

Имя класса предшествует имени метода, а не перед типом возврата.

Поэтому вместо, например,

Time::void setTime(int h)
{
    hours = h;
    minutes = 0;
    seconds = 0;
}

должен быть

void Time::setTime(int h)
{
    hours = h;
    minutes = 0;
    seconds = 0;
}

Time.cpp не компилируется из-за ошибок, и тогда компоновщик не может найти ни одного из символов.

  • 0
    Я изменил все это, но все еще получаю те же ошибки.
  • 1
    Видели ли вы синтаксические ошибки до внесения этих изменений? Если нет, это означает, что Code :: Blocks не вызывает компилятор на Time.cpp. Я не использую Code :: Blocks, поэтому я не могу здесь помочь.
Показать ещё 1 комментарий

Ещё вопросы

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