2014-11-19 2 views
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; 
} 

ответ

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

Я изменил все те, но все равно получаю те же ошибки. – TheNotoriousWMB

+1

Вы видели синтаксические ошибки, прежде чем вы вносили эти изменения? Если нет, значит, Code :: Blocks не вызывает компилятор на Time.cpp. Я не использую Code :: Blocks, поэтому я не могу здесь помочь. – MinusBrain

+0

Должно быть, это был какой-то код :: Блоки. Я добавил файлы в проект, используя мастер классов, но создав новый проект и добавив все файлы к нему, отлично работает. Спасибо, в любом случае. – TheNotoriousWMB