Неопределенная ссылка на методы класса, использующие 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;
}

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;
}

0

Решение

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

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

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

так должно быть

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

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

2

Другие решения


По вопросам рекламы [email protected]