Форум программистов, компьютерный форум CyberForum.ru

Реализация класса в отдельном файле - C++

Восстановить пароль Регистрация
 
БелыйКлык
 Аватар для БелыйКлык
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 2
18.05.2013, 15:17     Реализация класса в отдельном файле #1
Изучаю C++ (вернее только начал) по учебнику "Харви М. Дейтел, Пол Дж. Дейтел - Как программировать на C++" и застрял на создании классов в отдельном файле с разбиением на интерфейс и реализацию.

Есть 3 файла:
Заголовочный класса:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <string>
using std::string;
 
class GradeBook
{
    public:
        GradeBook(string);
        void setCourseName(string);
        string getCourseName();
        void displayMessage();
 
    private:
        string courseName;
 
 
};
Реализация класса:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <iostream>
using std::cout;
using std::endl;
 
#include "GradeBook.h"
 
GradeBook::GradeBook (string name)
{
    setCourseName(name);
}
 
void GradeBook::setCourseName (string name)
{
    courseName=name;
}
 
string GradeBook::getCourseName()
{
    return courseName;
}
 
void GradeBook::displayMessage()
{
    cout << "Добро пожаловать\n Курс: " << getCourseName() << endl;
}
И сама программа:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
 
#include "GradeBook.h"
 
int main()
{
    GradeBook mygr("azzzzz");
    string nameOfCourse;
 
    cout << "Текущий курс: " << mygr.getCourseName() << endl;
    
    cout << "Введите курс: ";
    getline(cin, nameOfCourse);
    cout << endl;
    mygr.setCourseName(nameOfCourse);
 
    mygr.displayMessage();
 
    return 0;
}
При сборке линковщик выдаёт ошибки:
main.cpp|10| undefined reference to `GradeBook::GradeBook(std::string)'
main.cpp|13| undefined reference to `GradeBook::getCourseName()'
main.cpp|18| undefined reference to `GradeBook::setCourseName(std::string)'
main.cpp|20| undefined reference to `GradeBook::displayMessage()'

В учебнике по этому поводу ничего не написано, разобраться с ошибкой самостоятельно пока не могу, хотя догадываюсь в чём проблема (насколько я понял основная программа просто "не знает" где находится реализация данного класса).
Хотелось бы узнать чем вызвана данная проблема и как её можно решить.

ОС: Linux (Archlinux)
Компилятор: g++
IDE не использую, вместо этого пишу в vim с плагином c.vim
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Pakisan
14 / 14 / 1
Регистрация: 04.01.2013
Сообщений: 61
18.05.2013, 15:38     Реализация класса в отдельном файле #2
Собрал твой проект, проблем не возникло(Ubuntu 12.10, Eclipse)
Собрал в след. виде GradeBook.h -> GradeBook.cpp -> Main.cpp
БелыйКлык
 Аватар для БелыйКлык
0 / 0 / 0
Регистрация: 18.05.2013
Сообщений: 2
18.05.2013, 15:49  [ТС]     Реализация класса в отдельном файле #3
Находил в сети информацию, что IDE сами как-то разруливают зависимости между файлами, если они находятся в одном проекте. Хотелось бы узнать как это делать нативно
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
18.05.2013, 15:52     Реализация класса в отдельном файле #4
Самое тупое, что можно предложить:
g++ -c -Wall *.cpp
g++ -o program *.o

А вообще почитайте про Makefile.
Yandex
Объявления
18.05.2013, 15:52     Реализация класса в отдельном файле
Ответ Создать тему
Опции темы

Текущее время: 12:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru