Урок №23. Багатофайлові програми

  Юрій  | 

  Оновл. 9 Чер 2021  | 

 854

Як тільки програми стають більшими, їх слід розбивати на декілька файлів (для зручності та покращення функціональності). Однією з переваг використання IDE є легкість в роботі з n-ою кількістю файлів. Ми вже знаємо, як створювати і компілювати однофайлові проекти, додання нових файлів не складе труднощів.

Багатофайлові проекти в Visual Studio

У Visual Studio клацніть правою кнопкою миші по імені вашого проекту в "Обозревателе решений", після чого виберіть "Добавить" > "Создать элемент...":

У спливаючому діалоговому вікні виберіть тип "Файл С++", вкажіть ім’я та місцезнаходження файлу і після цього натисніть "Добавить":

Також ви можете додавати файли до вашого проекту через "Проект" > "Добавить новый элемент...":


Багатофайлові проекти в Code::Blocks

В Code::Blocks перейдіть в меню "File" > "New" > "File...":

Після цього виберіть "C/C++ source" і натисніть "Go":

Потім "Next" (це вікно може бути, а може і не бути):

Потім "C++" і знову "Next":

Тепер вкажіть ім’я новому файлу (пам’ятайте про розширення .cpp) і його місцезнаходження (натисніть на три крапки і виберіть шлях). Переконайтесь, що поставлені всі три галочки (вони відповідають за режими конфігурації). Після цього натисніть на "Finish":

Готово! Файл додано.

Багатофайлові проекти в GCC/G++

У командному рядку вам необхідно буде створити файл, вказати його ім’я і підключити до компіляції. Наприклад:

g++ main.cpp add.cpp -o main

(де main.cpp і add.cpp — це імена файлів з кодом, а main — це ім’я файлу-результата)

Приклад багатофайлової програми

Розглянемо наступну програму, яка складається з двох файлів.

add.cpp:

main.cpp:

Спробуйте запустити цю програму. Вона не скомпілюється і ви отримаєте наступну помилку:

add: идентификатор не найден

При компіляції коду, компілятор не знає про існування функцій, які знаходяться в інших файлах. Це зроблено спеціально, щоб функції і змінні з однаковими іменами, але в різних файлах, не спричиняли конфлікт імен.

Проте, в даному випадку, ми хочемо, щоб main.cpp знав (і використовував) функцію аdd(), яка знаходиться в add.cpp. Для надання доступу main.cpp до функцій в add.cpp, нам потрібно використати попереднє оголошення:

Тепер, коли компілятор компілюватиме main.cpp, він знатиме, що таке add(). Спробуйте запустити цю програму ще раз.

Щось пішло не так!

Є багато речей, які можуть піти не так, особливо, якщо ви це робите в перший раз. Головне — не панікувати:

Пункт №1: Якщо ви отримали помилку від компілятора, що функція add() не визначена в функції main(), то, швидше за все, ви забули записати попереднє оголошення функції add() в main.cpp.

Пункт №2: Якщо ви отримали наступну помилку від лінкера:

unresolved external symbol "int __cdecl add(int,int)" (?add@@YAHHH@Z) referenced in function _main

То можливих рішень є декілька:

a) Швидше за все, add.cpp некоректно доданий в ваш проект. Якщо ви використовуєте Visual Studio або Code::Blocks, то ви повинні побачити add.cpp в "Обозревателе решений" в списку файлів вашого проекту або в панелі проекту IDE. Якщо доданого файлу немає, то клацніть правою кнопкою миші по імені вашого проекту і додайте файл, як це показано вище, а потім спробуйте ще раз скомпілювати ваш проект.

б) Цілком можливо, що ви додали add.cpp до іншого проекту.

в) Цілком можливо, що доданий файл не підключений до компіляції/лінкінгу. Клацніть правою кнопкою миші по імені вашого доданого файлу і виберіть пункт "Свойства":

Переконайтеся, що пункт "Исключен из сборки" залишений порожнім або вибрано значення "Нет":

Пункт №3: Не пишіть наступний рядок в main.cpp:

Це призведе до того, що компілятор вставить весь вміст add.cpp безпосередньо в main.cpp замість того, щоб розглядати ці файли як окремі.

Тест

Розділіть наступну програму на два файли (main.cpp і input.cpp): main.cpp повинен містити функцію main(), а input.cpp повинен містити функцію getInteger().

Не забувайте, що для функції getInteger() вам знадобиться попереднє оголошення в main.cpp.

Відповідь

input.cpp:

main.cpp:

Оцінити статтю:

1 Зірка2 Зірки3 Зірки4 Зірки5 Зірок (5 оцінок, середня: 5,00 з 5)
Loading...

Залишити відповідь

Ваш E-mail не буде опублікований. Обов'язкові поля відмічені *