Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.02.2010, 12:58   #1
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию Заголовочный файл

начал изучать c++ в инсте, не пойму как сделать заголовочный файл, раньше не занимался этим, писал все в одном c, cpp файле
искал в интернете, попробовал - не работает
допустим такой пример

ф-я сложения двух чисел

add.h:

Код:
#ifndef ADD_H
#define ADD_H
int add(int,int);
#endif
add.cpp

Код:
#include "add.h"
int add(int a,int b) { return a+b; }
test.cpp

Код:
#include <iostream>
#include "add.h"
using std::cout;

int main(void)
{
  cout << add(2,3);
  return 0;
}
ошибка
Error: undefined reference add(int,int)

если включить сам cpp файл, то работает
#include "add.cpp"

но как же тогда работают другие библлиотеки, такие как vector.h итд
ведь мы же не подключаем vector.cpp
NiCola999 вне форума Ответить с цитированием
Старый 26.02.2010, 16:14   #2
RUSt88
Участник клуба
 
Регистрация: 29.12.2009
Сообщений: 1,166
По умолчанию

в принципе можно обойтись без файла *.cpp
реализацию выполнить в заголовочном файле

ошибка здесь
int add(int,int); - нужно описать также, как в модуле cpp (т.е. так int add(int a,int b) )
прогер C\C++\C#\Delphi
ася: [семь 3]-[97]-[1 шесть]

Последний раз редактировалось RUSt88; 26.02.2010 в 16:23.
RUSt88 вне форума Ответить с цитированием
Старый 26.02.2010, 17:35   #3
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

NiCola999, какой компилятор? В VS 2008 всё скомпилировалось нормально.

Использование прототипов позволяет вызывать функции до их определения (которое включает тело функции). В принципе, можно писать сразу #include "add.cpp", но тогда все прототипы должны быть в самом .cpp. По мере увеличения проекта становится удобнее выделять их в заголовочные файлы.

Кстати, вместо
Код:
#ifndef ADD_H
#define ADD_H
...
#endif
часто используют #pragma once.

Последний раз редактировалось ds.Dante; 26.02.2010 в 17:38.
ds.Dante вне форума Ответить с цитированием
Старый 26.02.2010, 18:26   #4
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

DevC++

в общем-то я кажется понял в чем была проблема, DevC++ компилирует только один файл, а надо компилячить test.cpp и add.cpp вместе, не знаю как это сделать в DevC++, придется наверно использовать gcc компилятор из папки devc++ )

Последний раз редактировалось NiCola999; 26.02.2010 в 18:29.
NiCola999 вне форума Ответить с цитированием
Старый 26.02.2010, 18:29   #5
NiCola999
Не
Участник клуба
 
Регистрация: 29.10.2009
Сообщений: 1,456
По умолчанию

Цитата:
Кстати, вместо

Код:
#ifndef ADD_H
#define ADD_H
...
#endif
часто используют #pragma once.
спасибо, не знал
NiCola999 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
C++. Прочитать файл и вывести в другой файл каждую N-ую строку Straiker Помощь студентам 3 15.12.2009 05:49
Помогите создать заголовочный файл для Dll ifynk Общие вопросы Delphi 4 11.09.2009 17:15
заголовочный файл и файл исходного текста Роман Радер Общие вопросы C/C++ 10 21.07.2009 21:46
Ссылка на файл из текущей папки! Сбор инфы в один файл! mephist Microsoft Office Excel 11 10.07.2009 13:51
Преобразование заголовочный файлов в MASM Zap Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 03.05.2009 00:17