Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
1 / 1 / 1
Регистрация: 20.07.2017
Сообщений: 32

Компиляция и компоновка нескольких файлов

27.07.2017, 06:32. Показов 1311. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день уважаемые форумчане. Продолжая изучать учебник "How to Prgoramm C++" я наткнулся на материал, в котором описывается код, точнее коды, размещенные по 3 файлам, соответствующие файлы и типы файлов приведены ниже:

main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include "GradeBook.h"
#include <iostream>
using namespace std;
 
#include <string>
using namespace std;
 
#include "GradeBook.h"
int main()
{
    GradeBook gradeBook1("CS101 Introduction to C++ programming");
    GradeBook gradeBook2("CS102 Data Structures in C++");
    
    cout <<"gradeBook1 created for: "<<gradeBook1.getCourseName()
         <<"\ngradeBook2 created for: "<<gradeBook2.getCourseName()
         <<endl;
         return 0;
}
GradeBook.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#pragma once
 
#include <string>
using namespace std;
class GradeBook
{
    public:
        GradeBook(string);
        void setCourseName(string);
        string getCourseName();
        void displayMessage();
        
        private:
            string courseName;
};
GradeBook.cpp
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
26
27
28
29
30
#include <iostream>
using namespace std;
 
#include <string>
using namespace std;
 
#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 <<"Welcome to the grade book for\n"<<getCourseName()<<"!"<<endl;
}
При компиляции файла кода из файла main.cpp (где собственно находится функция main), происходит ошибка следующего содержания:
C:\Documents and Settings\Ïîëüçîâàòåëü\Ìîè äîêóìåíòû\programms\Project1(GradeBo ok SUKA)\main.o main.cpp.text+0x84): undefined reference to `GradeBook::GradeBook(std::string)'
C:\Documents and Settings\Ïîëüçîâàòåëü\Ìîè äîêóìåíòû\programms\Project1(GradeBo ok SUKA)\main.o main.cpp.text+0xe5): undefined reference to `GradeBook::GradeBook(std::string)'
C:\Documents and Settings\Ïîëüçîâàòåëü\Ìîè äîêóìåíòû\programms\Project1(GradeBo ok SUKA)\main.o main.cpp.text+0x11a): undefined reference to `GradeBook::getCourseName()'
C:\Documents and Settings\Ïîëüçîâàòåëü\Ìîè äîêóìåíòû\programms\Project1(GradeBo ok SUKA)\main.o main.cpp.text+0x134): undefined reference to `GradeBook::getCourseName()'
C:\Documents and Settings\Ïîëüçîâàòåëü\Ìîè äîêóìåíòû\programms\Project1(GradeBo ok SUKA)\collect2.exe [Error] ld returned 1 exit status
26 C:\Documents and Settings\Ïîëüçîâàòåëü\Ìîè äîêóìåíòû\programms\Project1(GradeBo ok SUKA)\Makefile.win recipe for target 'Gradebook3.exe' failed

Подскажите пожалуйста, что означают данные ошибки и правильно ли я понял, что проблемы не с кодом, а с процессом компиляции и компоновки?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.07.2017, 06:32
Ответы с готовыми решениями:

Компиляция нескольких файлов
Создал проект на wxDevC++ таким образом: потом создал три файла в проекте: coordin.h #ifndef COORDIN_H_ #define COORDIN_H_...

Компиляция нескольких файлов
Здравствуйте, есть программа состоящая из 4 cpp, необходимо ее собрать, попытался собрать с помощью MinGW(взял тут...

Компиляция нескольких файлов со структурами C++
Доброго времени суток! Начал работать с разделением программы на файлы и, как следовало ожидать, наткнулся на ошибки. Реализованы...

8
Эксперт по математике/физикеЭксперт С++
 Аватар для Ilot
2224 / 1426 / 420
Регистрация: 16.05.2013
Сообщений: 3,646
Записей в блоге: 6
27.07.2017, 07:32
Код ужасен.
Теперь по ошибкам компилятора.
C++
1
2
3
4
GradeBook::GradeBook(string name); //<-- Лишняя точка с запятой
{
    setCourseName(name);
}
1
1 / 1 / 1
Регистрация: 20.07.2017
Сообщений: 32
28.07.2017, 00:15  [ТС]
Ilot, из книги переписал, но книга в теоретической части вполне ничего как мне показалось.

Добавлено через 16 часов 40 минут
Ilot, исправил указанную тобой ошибку - программа все ровно не компилируется с ошибкой 'undefined reference to' (в главном посте они описаны более подробно по каждой функции из файла main.cpp).
0
 Аватар для proghelp4you
62 / 62 / 34
Регистрация: 09.07.2017
Сообщений: 475
28.07.2017, 00:34
Z1qqO,
GradeBook.h
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
26
27
28
29
30
#pragma once
 
using namespace std;
 
class GradeBook
{
private:
    string courseName;
 
public:
    GradeBook(string name)
    {
        setCourseName(name);
    }
 
    void setCourseName(string name)
    {
        courseName = name;
    }
 
    string getCourseName()
    {
        return courseName;
    }
 
    void displayMessage()
    {
        cout << "Welcome to the grade book for" << endl << getCourseName() << "!" << endl;
    }
};
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <string>
#include "GradeBook.h"
 
using namespace std;
 
int main()
{
    GradeBook gradeBook1("CS101 Introduction to C++ programming");
    GradeBook gradeBook2("CS102 Data Structures in C++");
    
    cout << "gradeBook1 created for: " << gradeBook1.getCourseName() << endl;
    cout << "gradeBook2 created for: " << gradeBook2.getCourseName() << endl;
    
    return 0;
}
0
1 / 1 / 1
Регистрация: 20.07.2017
Сообщений: 32
31.07.2017, 02:49  [ТС]
proghelp4you, возможно вы не поняли, но мне нужно понять как откомпилировать сразу 3 файла, причем 2 из которых являются .cpp типом, в одном из которых только лишь есть функция main, а в другом - реализация функций класса GradeBook.h. А в классе GradeBook.h находятся прототипы функций, реализация которых описана в файле GradeBook.cpp.
0
 Аватар для proghelp4you
62 / 62 / 34
Регистрация: 09.07.2017
Сообщений: 475
31.07.2017, 03:02
Z1qqO, просто добавьте файлы в проект и скомпилируйте. Вот 3 файла:
GradeBook.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#pragma once
#include <iostream>
#include <string>
 
using namespace std;
 
class GradeBook
{
private:
    string courseName;
 
public:
    GradeBook(string);
    void setCourseName(string);
    string getCourseName();
    void displayMessage();
};
GradeBook.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#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 << "Welcome to the grade book for" << endl << getCourseName() << "!" << endl;
}
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "GradeBook.h"
 
using namespace std;
 
int main()
{
    GradeBook gradeBook1("CS101 Introduction to C++ programming");
    GradeBook gradeBook2("CS102 Data Structures in C++");
    
    cout << "gradeBook1 created for: " << gradeBook1.getCourseName() << endl;
    cout << "gradeBook2 created for: " << gradeBook2.getCourseName() << endl;
    
    cin.get();
 
    return 0;
}
0
 Аватар для Case-Man
167 / 107 / 22
Регистрация: 02.01.2012
Сообщений: 596
31.07.2017, 06:15
Цитата Сообщение от Z1qqO Посмотреть сообщение
мне нужно понять как откомпилировать сразу 3 файла
Вы до сих пор ни разу не указали, чем Вы их компилируете и как.. IDE? Командная строка?
0
1 / 1 / 1
Регистрация: 20.07.2017
Сообщений: 32
01.08.2017, 00:09  [ТС]
Case-Man, dev-c++, проблему уже решил сам, но все ровно спасибо)
0
3 / 3 / 2
Регистрация: 10.10.2016
Сообщений: 50
25.10.2017, 20:21
Z1qqO, я тоже изучаю эту книгу и появилась та же самая проблема, подскажите решение.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.10.2017, 20:21
Помогаю со студенческими работами здесь

компиляция нескольких файлов GCC
У меня есть 4 файлы. main.c #include &lt;stdio.h&gt; #include &quot;main.h&quot; #include &quot;file_1.h&quot; int test_value_1=111; int...

Компиляция, компоновка, линковка (undefined reference to.)
Описывать особо нечего, по-этому просто приведу файлы. Вопрос: что я делаю не так, почему внутри cpp не видно всё, что объявлено в hpp? ...

Компиляция нескольких файлов
Допустим запустил такую команду: mcc -m f1.m f2.m f3.m где f1-f3 это файлы-функции. Какая из этих трех функций будет...

Компиляция нескольких файлов
Написать скрипт, который компилирует заданные файлы и передает на исполнение. Файлы расширения .c, компиляция командой gcc. Файлы...

Компиляция программы из нескольких файлов
Привет всем. Короче пытаюсь скомпилить проект, код у меня размещен в нескольких файлах, чтоб главный файл не загромождать кодом и вот не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru