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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.94
!Андрей!
6 / 6 / 0
Регистрация: 31.01.2012
Сообщений: 134
#1

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

30.07.2012, 07:45. Просмотров 2262. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.07.2012, 07:45
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Деление кода на .h .cpp (C++):

Разделение кода на cpp и h файлы - C++
Добрый день. Расскажите, пожалуйста, как разделить код на два файла cpp и файл h. #include &lt;iostream&gt; #include &lt;conio.h&gt; using...

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

С помощью командной строки >namberstr f1.cpp Определить число строк в файле с именем f1.cpp - C++
С помощью командной строки &gt;namberstr f1.cpp Определить число строк в файле с именем f1.cpp

Подключение файлов main.cpp some.cpp some.h - C++
Всем привет, программа разделенна на три файла poly.cpp main.cpp poly.h Кто мог бы объяснить как происходит подключение этих файлов, и как...

Библиотеки в CPP. Ошибка компиляции | CPP - C++
Доброго вечера! Появился один вопросик недавно. Начал юзать библиотеку &lt;windows.h&gt; для использования такой команды как &quot;system&quot; в коде....

C:\tsserver\Projects\cpp\codeblocks\MyComp\compiler\mmz\mmz. cpp|29|error: no match for 'operator=' in '* Item = * Source'| - C++
char **Source; TArray&lt;std::string&gt; *Item; ... *Item=*Source;

25
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 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
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
30.07.2012, 08:17 #3
В качестве альтернативы Include Guard для заголовочных файлов можно использовать pragma once, но такой способ поддерживается не всеми компиляторами
0
!Андрей!
6 / 6 / 0
Регистрация: 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
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
30.07.2012, 08:24 #5
!Андрей!, значит, файл queue.cpp не линкуется. Почему это происходит, зависит от того, какой у тебя компилятор и используешь/не используешь ли ты IDE.
0
!Андрей!
6 / 6 / 0
Регистрация: 31.01.2012
Сообщений: 134
30.07.2012, 08:26  [ТС] #6
Использую Dev-C++

Что такое IDE не имею понятия))
а как-нибудь это можно поправить чтобы можно было работать спокойно дальше? Ну и чтобы компилилось всё на других компах
0
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 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 / 0
Регистрация: 31.01.2012
Сообщений: 134
30.07.2012, 08:34  [ТС] #8
Блин, если честно - не очень понял что нужно сделать) Сначала попробовал в командную строку забить
g++ -o out.exe main.cpp queue.cpp
- он мне написал:
g++ не является внутренней командой...

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

Цитата Сообщение от Nameless One Посмотреть сообщение
g++ должен быть в PATH
Ну ладно, оставим пока увлекательные приключения типа поиска исполняемых файлов MinGW и редактирование переменных окружения в Windows. Попробуй создать проект заново и убедись, что файл queue.cpp добавлен к проекту
0
!Андрей!
6 / 6 / 0
Регистрация: 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
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.07.2012, 08:43 #11
Попробовал в Dev-C++. Всё компилируется.
1
Миниатюры
Деление кода на .h .cpp  
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
30.07.2012, 08:44 #12
Цитата Сообщение от !Андрей! Посмотреть сообщение
fatal error C1010: непредвиденный конец файла во время поиска предкомпилированного заголовка. Возможно, вы забыли добавить директиву "#include "StdAfx.h"" в источник.
Это уже заморочки студии. Либо добавь строчку #include "StdAfx.h" в начало файла main.cpp, либо создавай действительно пустой проект.

Не по теме:

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

1
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
30.07.2012, 08:45 #13
!Андрей!, вы какой проект создаёте?
1
!Андрей!
6 / 6 / 0
Регистрация: 31.01.2012
Сообщений: 134
30.07.2012, 08:46  [ТС] #14
Цитата Сообщение от Nameless One Посмотреть сообщение
Попробуй создать проект заново и убедись, что файл queue.cpp добавлен к проекту
Вооооот, вроде всё так делаю, всё в одной папке находится и т.п.
код внутри - точно такой как скинули:
0
Миниатюры
Деление кода на .h .cpp  
!Андрей!
6 / 6 / 0
Регистрация: 31.01.2012
Сообщений: 134
30.07.2012, 08:47  [ТС] #15
Цитата Сообщение от alsav22 Посмотреть сообщение
!Андрей!, вы какой проект создаёте?
Консольное приложение Win32
0
30.07.2012, 08:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.07.2012, 08:47
Привет! Вот еще темы с ответами:

Разделение программы на .h .cpp .cpp - C++
Никак не пойму как правильно разделять программу на несколько файлов. Вот код : ( в чем проблема ? ) main.cpp #include...

Использовать void из 1.cpp в 2.cpp - C++
Допустим, есть функция void Hello(). Она в файле 1.cpp. Мне нужно её использовать в файле 2.cpp, но программа пишет, что идентификатор не...

Не могу исправить ошибку :113 H:\Dev-Cpp\Проекты\уроки\Безымянный3.cpp cannot convert `IDirectDraw7**' to `IDirectDraw**' for argument `2' to `HRESULT DirectDrawCreate(GUID*, IDirectDraw**, IUnknown*) - C++
Недавно начал изучать оконные программы и работу с DirectX. Но при написании программы столкнулся с проблемой: не могу исправить одну...

C:\tsserver\Projects\cpp\codeblocks\MyComp\IDE\IDE\IDE.cpp|1 5|error: 'InitApplication' was not declared in this scope| - C++
//================================================================================================= #include &quot;IDE.hpp&quot;...


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

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

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