Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.60/15: Рейтинг темы: голосов - 15, средняя оценка - 4.60
6 / 6 / 1
Регистрация: 31.01.2012
Сообщений: 134
1

Деление кода на .h .cpp

30.07.2012, 07:45. Просмотров 2899. Ответов 25
Метки нет (Все метки)

Подскажите пожалуйста как правильно поделить код! Обязательно чтобы были заголовочные файлы и файлы .cpp

main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
# include <iostream>
using namespace std;
# include <conio.h>
# include "queue.h"
 
int main(void)
{
    show(5);
    
    getch();
    return 0;
}
queue.cpp
C++
1
2
3
4
5
6
7
8
9
# include <iostream>
using namespace std;
 
void show(int n)
{
     cout<<n;     
}
 
# include "queue.h"
queue.h
C++
1
void show(int);
Выдаёт ошибку:

In function `main':
[Linker error] undefined reference to `show(int)'
ld returned 1 exit status

0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
30.07.2012, 07:45
Ответы с готовыми решениями:

Разделение кода на cpp и h файлы
Добрый день. Расскажите, пожалуйста, как разделить код на два файла cpp и файл h. #include...

Файл исходного кода *.cpp создаётся в utf-8
Всем привет! Установил Visual Studio, проекты на C++ создаются и в них файлы *.cpp в кодировке...

Есть три файла. файл main.cpp и Source.cpp знают только Header.h, так как он подключен. как же подключается Source.cpp
main.cpp #include &lt;iostream&gt; #include&quot;Header.h&quot; using namespace std; int main() { A ob;...

Мешает ли разделение кода на объявление (.h) и определение (.cpp) inline оптимизации?
Читал что когда включают хедер но не реализацию в единицу трансляции, это мешает компилятору...

25
Эксперт С++
5811 / 3462 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
30.07.2012, 08:16 2
main.cpp:
C++
1
2
3
4
5
6
7
8
9
# include <iostream>
# include "queue.h"
 
int main(void)
{
    show(5);
 
    return 0;
}
queue.h:
C++
1
2
3
4
5
6
#ifndef QUEUE_H
#define QUEUE_H
 
void show(int);
 
#endif
queue.cpp:
C++
1
2
3
4
5
6
7
8
# include <iostream>
#include "queue.h"
using namespace std;
 
void show(int n)
{
     cout<<n;     
}
0
Эксперт С++
5811 / 3462 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
30.07.2012, 08:17 3
В качестве альтернативы Include Guard для заголовочных файлов можно использовать pragma once, но такой способ поддерживается не всеми компиляторами
0
6 / 6 / 1
Регистрация: 31.01.2012
Сообщений: 134
30.07.2012, 08:19  [ТС] 4
Сделал как написали, пишет такую же ошибку:

In function `main':
[Linker error] undefined reference to `show(int)'
ld returned 1 exit status
0
Эксперт С++
5811 / 3462 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
30.07.2012, 08:24 5
!Андрей!, значит, файл queue.cpp не линкуется. Почему это происходит, зависит от того, какой у тебя компилятор и используешь/не используешь ли ты IDE.
0
6 / 6 / 1
Регистрация: 31.01.2012
Сообщений: 134
30.07.2012, 08:26  [ТС] 6
Использую Dev-C++

Что такое IDE не имею понятия))
а как-нибудь это можно поправить чтобы можно было работать спокойно дальше? Ну и чтобы компилилось всё на других компах
0
Эксперт С++
5811 / 3462 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
30.07.2012, 08:29 7
Цитата Сообщение от !Андрей! Посмотреть сообщение
Использую Dev-C++
Что такое IDE не имею понятия))
Это и есть IDE. Насколько я знаю, в качестве компилятора там по умолчанию идет MinGW g++ (да и по ошибкам похоже). Судя по всему, файл queue.cpp просто не был добавлен в проект, т.к. среда не передает его линкеру.

Попробуй из консоли выполнить в директории проекта:

Код
g++ -o out.exe main.cpp queue.cpp
Естественно, g++ должен быть в PATH
1
6 / 6 / 1
Регистрация: 31.01.2012
Сообщений: 134
30.07.2012, 08:34  [ТС] 8
Блин, если честно - не очень понял что нужно сделать) Сначала попробовал в командную строку забить
g++ -o out.exe main.cpp queue.cpp
- он мне написал:
g++ не является внутренней командой...

ну и на всякий случай bat файл создал - тоже самое пишет, ну бат - в директории конечно находится)
0
Эксперт С++
5811 / 3462 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
30.07.2012, 08:39 9
Цитата Сообщение от !Андрей! Посмотреть сообщение
g++ не является внутренней командой...
это потому, что

Цитата Сообщение от Nameless One Посмотреть сообщение
g++ должен быть в PATH
Ну ладно, оставим пока увлекательные приключения типа поиска исполняемых файлов MinGW и редактирование переменных окружения в Windows. Попробуй создать проект заново и убедись, что файл queue.cpp добавлен к проекту
0
6 / 6 / 1
Регистрация: 31.01.2012
Сообщений: 134
30.07.2012, 08:40  [ТС] 10
Вот что Visual Studio пишет:

1>------ Построение начато: проект: fileeeeees, Конфигурация: Debug Win32 ------
1>Построение начато 30.07.2012 8:39:23.
1>PrepareForBuild:
1> Создание каталога "D:\Projects\fileeeeees\Debug\".
1>InitializeBuildStatus:
1> Создание "Debug\fileeeeees.unsuccessfulbuild", так как было задано "AlwaysCreate".
1>ClCompile:
1> stdafx.cpp
1> queue.cpp
1>d:\projects\fileeeeees\fileeeeees\queue.cpp(2): warning C4627: #include "queue.h": пропущен при поиске использования предкомпилированного заголовка
1> Добавление директивы в "StdAfx.h" или перестройка предкомпилированного заголовка
1>d:\projects\fileeeeees\fileeeeees\queue.cpp(9): fatal error C1010: непредвиденный конец файла во время поиска предкомпилированного заголовка. Возможно, вы забыли добавить директиву "#include "StdAfx.h"" в источник.
1> fileeeeees.cpp
1> Создание кода...
1>
1>СБОЙ построения.
1>
1>Затраченное время: 00:00:02.14
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
0
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.07.2012, 08:43 11
Попробовал в Dev-C++. Всё компилируется.
1
Миниатюры
Деление кода на .h .cpp  
Эксперт С++
5811 / 3462 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
30.07.2012, 08:44 12
Цитата Сообщение от !Андрей! Посмотреть сообщение
fatal error C1010: непредвиденный конец файла во время поиска предкомпилированного заголовка. Возможно, вы забыли добавить директиву "#include "StdAfx.h"" в источник.
Это уже заморочки студии. Либо добавь строчку #include "StdAfx.h" в начало файла main.cpp, либо создавай действительно пустой проект.

Не по теме:

Учись читать сообщения компилятора, они не просто так выводятся

1
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.07.2012, 08:45 13
!Андрей!, вы какой проект создаёте?
1
6 / 6 / 1
Регистрация: 31.01.2012
Сообщений: 134
30.07.2012, 08:46  [ТС] 14
Цитата Сообщение от Nameless One Посмотреть сообщение
Попробуй создать проект заново и убедись, что файл queue.cpp добавлен к проекту
Вооооот, вроде всё так делаю, всё в одной папке находится и т.п.
код внутри - точно такой как скинули:
0
Миниатюры
Деление кода на .h .cpp  
6 / 6 / 1
Регистрация: 31.01.2012
Сообщений: 134
30.07.2012, 08:47  [ТС] 15
Цитата Сообщение от alsav22 Посмотреть сообщение
!Андрей!, вы какой проект создаёте?
Консольное приложение Win32
0
Эксперт С++
5811 / 3462 / 356
Регистрация: 08.02.2010
Сообщений: 7,448
30.07.2012, 08:48 16
!Андрей!, ну вон у товарища выше все успешно компилируется
1
69 / 63 / 5
Регистрация: 09.06.2012
Сообщений: 291
30.07.2012, 08:51 17
!Андрей!, Вы в проект должны добавить и в папку,Мне кажется на 99% что вы в проект не добавили queue
1
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.07.2012, 08:52 18
Цитата Сообщение от !Андрей! Посмотреть сообщение
Консольное приложение Win32
При создании в Студии, после ввода имени проекта, далее, и там снимите галочку - использовать предкомпилированные заголовки.
0
6 / 6 / 1
Регистрация: 31.01.2012
Сообщений: 134
30.07.2012, 08:53  [ТС] 19
В Visual Studio - Заработало когда я добавил строку #include "stdafx.h" в файл queue.cpp

А вот с Dev-C++ - не разобрался
0
5473 / 4868 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
30.07.2012, 08:54 20
Цитата Сообщение от xADMIRALx Посмотреть сообщение
!Андрей!, Вы в проект должны добавить и в папку,Мне кажется на 99% что вы в проект не добавили queue
На скрине он у него есть.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
30.07.2012, 08:54

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Перевод кода с Delphi, деление нацело
во общем есть условие { if ((y4*x3 div 10).quot==4) if (((100*x1+10*x2+x3)*y1...

.m to .cpp левосторонее деление матриц
Доброго времени суток. Помогите перевести с матлаба в с++; x,y -векторы размерностью n; mx...

Вынос кода из CPP во внешний файл
Здравствуйте. Используется С Builder 2006 На данный момент структура проекта...

Очередность исполнения кода в нескольких cpp файлах
Есть головной файл с формой unit1.cpp в середине кода, передать продолжение программы в unit2.cpp...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.