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

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

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

Получение «неопределенной ссылки на« Time :: Time (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;
}

Время.ч

#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

Время.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;
}

person TheNotoriousWMB    schedule 19.11.2014    source источник


Ответы (1)


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

Итак, вместо, например.

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

должен быть

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

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

person MinusBrain    schedule 19.11.2014
comment
Я изменил все это, но все равно получаю те же ошибки. - person TheNotoriousWMB; 20.11.2014
comment
Видели ли вы синтаксические ошибки до внесения этих изменений? Если нет, это означает, что Code::Blocks не вызывает компилятор для Time.cpp. Я не использую Code::Blocks, поэтому не могу здесь помочь. - person MinusBrain; 20.11.2014
comment
Должно быть, это какая-то проблема с Code::Blocks. Я добавил файлы в проект с помощью мастера классов, но создание нового проекта и добавление в него всех файлов работает нормально. Спасибо, в любом случае. - person TheNotoriousWMB; 20.11.2014