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

.h и .cpp - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.73
-MefistofeL-
 Аватар для -MefistofeL-
21 / 19 / 1
Регистрация: 11.02.2009
Сообщений: 383
07.03.2011, 17:36     .h и .cpp #1
В общем написал небольшой шаблонный механизм, который собираюсь неоднократно юзать в будущем.
По файликам расфасовал его как надо, однако возникают проблемы при вызове. Выглядет она примерно так:

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

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

ЗЫ. аналогичная хрень и с моим проектиком, но полный код копировать сюда - издевательство.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
igorrr37
 Аватар для igorrr37
1593 / 1221 / 118
Регистрация: 21.12.2010
Сообщений: 1,868
Записей в блоге: 7
07.03.2011, 19:20     .h и .cpp #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";
}
-MefistofeL-
 Аватар для -MefistofeL-
21 / 19 / 1
Регистрация: 11.02.2009
Сообщений: 383
07.03.2011, 20:07  [ТС]     .h и .cpp #3
нет... мне как раз нужна статическая библиотека, чтобы ее в будущем подключать к моим проектам через заголовочный файл.
можете подсказать пару манулов, как это сделать через g++ или qtcreator?

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

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

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

мне нужно замутить такую же хрень, как и std: так чтобы подключался только заголовочный файл, в котором лежат только объявления. Как это сделать??
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
08.03.2011, 02:02     .h и .cpp #11
-MefistofeL-, там используется либо прилинкованная статическая библиотека, либо все на шаблонах, поэтому реализация и описание не разделяют
вообщем это не тот путь
lemegeton
 Аватар для lemegeton
2908 / 1337 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
08.03.2011, 13:22     .h и .cpp #12
Цитата Сообщение от -MefistofeL- Посмотреть сообщение
мне нужно замутить такую же хрень, как и std: так чтобы подключался только заголовочный файл, в котором лежат только объявления. Как это сделать??
Никак. Если подключать с помощью #include только объявления, не линкуя с описаниями, то никак. Если в объявлении есть и описание, то все путем.

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

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

С помощью командной строки >namberstr f1.cpp Определить число строк в файле с именем f1.cpp C++
Использовать void из 1.cpp в 2.cpp C++
Main.cpp In file included from main.cpp C++

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

Или воспользуйтесь поиском по форуму:
-MefistofeL-
 Аватар для -MefistofeL-
21 / 19 / 1
Регистрация: 11.02.2009
Сообщений: 383
08.03.2011, 16:03  [ТС]     .h и .cpp #15
alex_x_x, ну это не страшно)) спасибо))
Yandex
Объявления
08.03.2011, 16:03     .h и .cpp
Ответ Создать тему
Опции темы

Текущее время: 16:59. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru