Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/48: Рейтинг темы: голосов - 48, средняя оценка - 4.63
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705

определение функции в ЗАГОЛОВОЧНОМ файле. В основном предполагается переопределение ТЕЛА этой функции. Как это сделать, не правя хидер?

17.06.2011, 19:36. Показов 10070. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сабж, а подробнее если в заголовочном файле hider.h описана функция, допустим так:
C++
1
2
3
4
void f ();
void f () {
  int per= 10;
}
Причём что очень важно, int per= 10 это тык скыть стандартный способ работы функции, а предполагается ещё и нестандартный, например

C++
1
int per= 22;
(понятно, что коды намного сложнее, это для примера)
Так, а прототип функции должен остаться ПРЕЖНИМ
[CPP]void f ();/CPP]

Так, вот пользователь хидера должен сам определять пользоваться ли ему стандартной функцией f:
C++
1
2
3
4
#incliude "hider.h"
int main () {
 f();
}
или писать свою так:
C++
1
2
3
4
5
6
7
8
#incliude "hider.h"
//прототип не пишем, ибо он прежний; уже прописан в хидере
void f () {
  int per= 22;
};
int main () {
 f();
}
ОК, но тогда пользователю во втором случае придётся лезть в хидер и ковыряться в нём своими толстыми пальцами, конкретнее- закомментировать стандартное определение f(); Возможно ли обойтись без этого, например, директивами препроцессору? Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.06.2011, 19:36
Ответы с готовыми решениями:

Сделать, чтобы в основном файле были только вызовы функций, а функции — лежали в подключаемом другом
Всем привет! Написал большой код. Хочу, чтобы в основном файле были только вызовы функций, а функции - лежали в подключаемом другом...

В каком заголовочном файле находятся функции Sleep() и delay() и как правильно их использовать?
в каком хедере они находятся и как правильно их использовать Добавлено через 1 минуту дядя яндекс ничего не подсказал =(

Функции в заголовочном файле
Почему нельза задать тело функции в .h файле??? например(header.h): #ifndef HEADER_H #define HEADER_H void f(){} #endif //...

15
15 / 15 / 1
Регистрация: 21.12.2010
Сообщений: 55
17.06.2011, 19:43
Хотелось бы взглянуть на то, что вы хотите сделать в оригинале, так как пример, который привели вы, решается, например, параметризацией функции.
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
17.06.2011, 19:54
не инклудить хедер, хотя все одно быдлокод
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
17.06.2011, 20:24  [ТС]
Цитата Сообщение от timchuchok Посмотреть сообщение
Хотелось бы взглянуть на то, что вы хотите сделать в оригинале, так как пример, который привели вы, решается, например, параметризацией функции.
там трудно разобраться.

Ну да, можно определить свой тип и пусть функция с ним работает. Но понимаете, я хочу свой код кинуть в люди и хочу упростить жизнь конечному пользователю, чтобы он не связывался с шаблонами и не определял свой тип, а просто переписал функцию и всё.
0
 Аватар для pito211
187 / 174 / 18
Регистрация: 22.03.2010
Сообщений: 612
17.06.2011, 20:43
тебе чё нужны две функции f содинаковыми параметрами но выполняющими разную работу? в данном случае это возможно, просто в хидере заключи в неймспейс и обращайся к ней header::f()
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
17.06.2011, 21:07  [ТС]
Вызов тоже осуществляется в хидере, получается, опять хидер править. Грустно, я-то разберусь, а вот челы нет.
0
Higher
 Аватар для diagon
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
17.06.2011, 21:08
Цитата Сообщение от kravam Посмотреть сообщение
директивами препроцессору
C++
1
2
3
4
5
6
7
//f.h
#ifdef _USE_FUNC
void f () {
  int per= 10;
  std::cout << per;
}
#endif
C++
1
2
3
4
5
6
7
8
9
10
11
12
//main.cpp
#include <iostream>
//#define _USE_FUNC
#include "f.h"
void f(){
    int per=22;
    std::cout << per;
}
int main(){
    f();
    return 0;
}
Если раскомментить _USE_FUNC то будет работать функция из хедера.
Можно наоборот, если не поставить макрос, то будет работать из хедера.
Для этого нужно #ifdef заменить на #ifndef
1
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
17.06.2011, 21:19  [ТС]
спасибо, пойдёт, но с натягом. Это получается в сопроводительной документации я должен указать, что для использования стандартной функции f(); необходимо помимо включения заголовочного файла в главном определить переменную //#define _USE_FUNC

Коряво. Ну, я наверное, многого хочу. Наверное, заставлю пользователя определять
собственные типы чтобы воспользоваться шаблонами функции, тут надо подумать будет
ещё.
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
17.06.2011, 21:53
Цитата Сообщение от kravam Посмотреть сообщение
спасибо, пойдёт, но с натягом. Это получается в сопроводительной документации я должен указать, что для использования стандартной функции f(); необходимо помимо включения заголовочного файла в главном определить переменную //#define _USE_FUNC

Коряво. Ну, я наверное, многого хочу. Наверное, заставлю пользователя определять
собственные типы чтобы воспользоваться шаблонами функции, тут надо подумать будет
ещё.
Микрософту не коряво, а тебе - коряво...
Открываем MSDN и читаем: чтобы использовать стандартные математические константы, надо определить имечко
#define _USE_MATH_DEFINES

0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
17.06.2011, 21:55  [ТС]
Не мне, а конечному пользователю моего проекта.
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
17.06.2011, 22:01
kravam, дык мы ж с тобой - конечные пользователи продукта Микрософт! Нам и приходится использовать определенную ими константу.
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
17.06.2011, 22:59  [ТС]
Так, алё, какая константа?
У меня нет никакой константы определённой мелкомягкими.
Конечный пользователь- это не я, это чел, который будет использовать мой хидер. И чем меньше он будет делать движений, тем лучше

Не по теме:

Какой Багдад? Какая война?

0
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
17.06.2011, 23:07
Ну а что ещё предложить? Ну есть ещё дедовский проверенный способ — callback-функции.
Пусть пользователь определяет какую хочет функцию и регистрирует её вызовом set_my_own_callback_function(my_func)
Ну а не определит — будет использоваться функция по-умолчанию.
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
17.06.2011, 23:22  [ТС]
Нельзя ли код? Дело в том, что функция, которую я кропаю и есть callback и она вызывается в хидере так:
C++
1
2
3
main_f (f) {
 f();
}
А если я накропаю в *cpp другую f () то компилятор не схавает определённую в хидере и в *cpp.
Вот я засомневался, а у меня функция ли обратного вызова? Ну да, её имя передаётся параметром в другую функцию и оттуда вызывается. Так ведь?
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
17.06.2011, 23:29
почему вообще в хедере определена функция?
1
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
17.06.2011, 23:50  [ТС]
потому что в хидере определён класс вместе с функцией, без которой он теряет смысл; класс следует определить в хидере и функцию там же.

Я могу, конечно, определить их в файлах кода, но что я скажу человеку, который будет их использовать? Вот тебе отдельно заголовочный файл, а вот файл реализации? Нет, со мной так не поступали; я скачал из инета класс Verylong, и реализованный и объявленный в одном хидере и очень этому рад, подключаю один хидер и не жужжу. Меньше движений.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.06.2011, 23:50
Помогаю со студенческими работами здесь

Прототип функции в заголовочном файле
Всем привет. Если объявляю прототип функции в заголовочном файле, пишет ошибку: Unresolved external ... referenced from..., а когда пишу...

Из функции в заголовочном файле записать данные в структуру
Подскажите , что я не так делаю. Надо из функции в заголовочном файле записать данные в структуру. Вот код: Файл main.c ...

Ошибка при объявлении функции в заголовочном файле
Здравствуйте! Я пытаюсь в заголовочном файле объявить вот такой метод: test.h #include &lt;string&gt; #include...

Функции, которые оперируют с элементами формы в заголовочном файле
Собственно, что нужно подключить, чтобы заголовочный файл видел мою форму? (для примера, в функции должны вызываться элементы формы) ...

Как это объяснить правильными словами ? В заголовочном файле я могу
Как грамотно описать словами следующий прием: myclassB.h private: MyClassA *t = new MyClassA(); QLocale *e = new...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru