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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
-MefistofeL-
21 / 19 / 1
Регистрация: 11.02.2009
Сообщений: 383
#1

.h и .cpp - C++

07.03.2011, 17:36. Просмотров 1457. Ответов 14
Метки нет (Все метки)

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

C++
1
2
3
4
5
6
//hw.h
 
#include <iostream>
using namespace std;
 
void hw (void);
C++
1
2
3
4
5
6
7
8
//hw.cpp
 
#include "hw.h"
 
void hw (void)
{
    cout<<"hello world\n"
}
C++
1
2
3
4
5
6
7
//runhw.cpp
#include "hw.h"
int main()
{
    hw();
    return 0;
}
результат таков:
$ g++ runhw.cpp

/tmp/ccajpyuy.o: In function `main':
runhw.cpp:(.text+0x7): undefined reference to `hw()'
collect2: ld returned 1 exit status

что не правильно?

ЗЫ. аналогичная хрень и с моим проектиком, но полный код копировать сюда - издевательство.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.03.2011, 17:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос .h и .cpp (C++):

С помощью командной строки >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;

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

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

14
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
07.03.2011, 19:20 #2
сделайте из hw.cpp статическую библиотеку и подключите к проекту. Но так тоже будет работать
C++
1
2
3
4
5
6
7
//runhw.cpp
#include"hw.cpp"
 
int main(){
    hw();
    return 0;
}
C++
1
2
3
4
5
//hw.h
#include <iostream>
using namespace std;
 
void hw (void);
C++
1
2
3
4
5
6
//hw.cpp
#include "hw.h"
 
void hw (void){
    cout<<"hello world\n";
}
0
-MefistofeL-
21 / 19 / 1
Регистрация: 11.02.2009
Сообщений: 383
07.03.2011, 20:07  [ТС] #3
нет... мне как раз нужна статическая библиотека, чтобы ее в будущем подключать к моим проектам через заголовочный файл.
можете подсказать пару манулов, как это сделать через g++ или qtcreator?

Добавлено через 3 минуты
З.Ы. меня одно смущает: каким образом в таком случае у меня работает эта хрень, когда я таким образом класс расписываю в двух файлах и подключаю только заголовочный файл. (Так у меня и в qt и в студии работало, однако не уверен о g++ в консоли )

Добавлено через 18 минут
Можете подсказать? Скажем stdio подключается воттак:
C++
1
#include <stdio.h>
в stdio.h нет ни единого описания функции, одни только объявления... это тоже статическая библиотека?
0
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
07.03.2011, 20:17 #4
Цитата Сообщение от -MefistofeL- Посмотреть сообщение
мне как раз нужна статическая библиотека, чтобы ее в будущем подключать к моим проектам через заголовочный файл.
можете подсказать пару манулов, как это сделать через g++
делаете такой .bat файл:
g++ -c hw.cpp
ar -r hw.a hw.o
и запускаете. На выходе получите статическую либу hw.a
вот здесь всё написано: GCC._Полное_руководство_(Гриффитс)(2004)
0
-MefistofeL-
21 / 19 / 1
Регистрация: 11.02.2009
Сообщений: 383
07.03.2011, 20:20  [ТС] #5
я уже прочитал, как собирать статическую библиотеку...
но я не уверен точно ли мне именно это нужно? std - это ведь статическая библиотека?
0
nxnx
Формучанин
362 / 293 / 16
Регистрация: 02.11.2010
Сообщений: 1,234
07.03.2011, 20:25 #6
для начало определись что тебе нужно? библиотека или модуль.
Если модуль то инклудить нужно
C
1
.cpp файл
(согласно листингу твоему)
0
igorrr37
1648 / 1276 / 133
Регистрация: 21.12.2010
Сообщений: 1,932
Записей в блоге: 7
07.03.2011, 20:28 #7
Цитата Сообщение от -MefistofeL- Посмотреть сообщение
меня одно смущает: каким образом в таком случае у меня работает эта хрень, когда я таким образом класс расписываю в двух файлах и подключаю только заголовочный файл. (Так у меня и в qt и в студии работало, однако не уверен о g++ в консоли )
согласен. нужно передавать g++ оба .cpp файла:
g++ runhw.cpp hw.cpp -o runhw.exe
1
-MefistofeL-
21 / 19 / 1
Регистрация: 11.02.2009
Сообщений: 383
07.03.2011, 20:38  [ТС] #8
в общем мне нужно замутить такую же хрень, как и std: так чтобы подключался только заголовочный файл, в котором лежат только объявления. Как это сделать??

Добавлено через 4 минуты
Цитата Сообщение от igorrr37 Посмотреть сообщение
согласен. нужно передавать g++ оба .cpp файла:
g++ runhw.cpp hw.cpp -o runhw.exe
да это помогло. но мне нужно сделать так чтобы в будущем мне достаточно было компилить только один файл
0
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
08.03.2011, 00:04 #9
Компилировать придется все изменившиеся файлы. С крупными проектами помогут make / cmake.
0
-MefistofeL-
21 / 19 / 1
Регистрация: 11.02.2009
Сообщений: 383
08.03.2011, 01:46  [ТС] #10
может мне кто-нибудь все-таки ответить на мой вопрос?

мне нужно замутить такую же хрень, как и std: так чтобы подключался только заголовочный файл, в котором лежат только объявления. Как это сделать??
0
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
08.03.2011, 02:02 #11
-MefistofeL-, там используется либо прилинкованная статическая библиотека, либо все на шаблонах, поэтому реализация и описание не разделяют
вообщем это не тот путь
0
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
08.03.2011, 13:22 #12
Цитата Сообщение от -MefistofeL- Посмотреть сообщение
мне нужно замутить такую же хрень, как и std: так чтобы подключался только заголовочный файл, в котором лежат только объявления. Как это сделать??
Никак. Если подключать с помощью #include только объявления, не линкуя с описаниями, то никак. Если в объявлении есть и описание, то все путем.

При компиляции с std объектами либо эти объекты являются шаблонами, которые не могут быть простым образом разделены на описание и определения, либо к экзешнику линкуется библиотека с кодом этих функций.
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0x00e35000)

Короче, такую "хрень" не "замутить". Надо линковать или пихать описание к объявлению.
1
-MefistofeL-
21 / 19 / 1
Регистрация: 11.02.2009
Сообщений: 383
08.03.2011, 15:31  [ТС] #13
lemegeton, то есть мне в любом случае надо будет компилить два цппшника?
0
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
08.03.2011, 15:34 #14
-MefistofeL-, в проектах компилятся сотни и тысячи cpp, так что переживете
1
-MefistofeL-
21 / 19 / 1
Регистрация: 11.02.2009
Сообщений: 383
08.03.2011, 16:03  [ТС] #15
alex_x_x, ну это не страшно)) спасибо))
0
08.03.2011, 16:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.03.2011, 16:03
Привет! Вот еще темы с ответами:

Не могу исправить ошибку :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;...

C:\tsserver\Projects\cpp\codeblocks\MyComp\IDE\IDE\IDE.cpp|3 9|undefined reference to `GetStockObject@4'| - C++
C:\tsserver\Projects\cpp\codeblocks\MyComp\IDE\IDE\IDE.cpp|39|undefined reference to `GetStockObject@4'|

Main.cpp In file included from main.cpp - C++
//class.cpp #include &quot;class.h&quot; Ticket::Ticket() { prise = 0; marshrut = &quot;none&quot;; time = &quot;none&quot;; ...


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

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

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