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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 25, средняя оценка - 4.84
kravam
быдлокодер
1703 / 890 / 45
Регистрация: 04.06.2008
Сообщений: 5,489
#1

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

17.06.2011, 19:36. Просмотров 3598. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.06.2011, 19:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос определение функции в ЗАГОЛОВОЧНОМ файле. В основном предполагается переопределение ТЕЛА этой функции. Как это сделать, не правя хидер? (C++):

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

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

Ошибка при объявлении функции в заголовочном файле - C++
Здравствуйте! Я пытаюсь в заголовочном файле объявить вот такой метод: test.h #include <string> #include <vector> class...

Возникла необходимость в основном коде вызвать функцию и чтобы код продолжал выполнение, НЕ ДОЖИДАЯСЬ окончания работы этой функции - C++
Не могу сообразить, буду благодарен за простой пример!

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

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

15
timchuchok
15 / 15 / 0
Регистрация: 21.12.2010
Сообщений: 55
17.06.2011, 19:43 #2
Хотелось бы взглянуть на то, что вы хотите сделать в оригинале, так как пример, который привели вы, решается, например, параметризацией функции.
0
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
17.06.2011, 19:54 #3
не инклудить хедер, хотя все одно быдлокод
0
kravam
быдлокодер
1703 / 890 / 45
Регистрация: 04.06.2008
Сообщений: 5,489
17.06.2011, 20:24  [ТС] #4
Цитата Сообщение от timchuchok Посмотреть сообщение
Хотелось бы взглянуть на то, что вы хотите сделать в оригинале, так как пример, который привели вы, решается, например, параметризацией функции.
там трудно разобраться.

Ну да, можно определить свой тип и пусть функция с ним работает. Но понимаете, я хочу свой код кинуть в люди и хочу упростить жизнь конечному пользователю, чтобы он не связывался с шаблонами и не определял свой тип, а просто переписал функцию и всё.
0
pito211
186 / 173 / 8
Регистрация: 22.03.2010
Сообщений: 612
17.06.2011, 20:43 #5
тебе чё нужны две функции f содинаковыми параметрами но выполняющими разную работу? в данном случае это возможно, просто в хидере заключи в неймспейс и обращайся к ней header::f()
0
kravam
быдлокодер
1703 / 890 / 45
Регистрация: 04.06.2008
Сообщений: 5,489
17.06.2011, 21:07  [ТС] #6
Вызов тоже осуществляется в хидере, получается, опять хидер править. Грустно, я-то разберусь, а вот челы нет.
0
diagon
Higher
1932 / 1198 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
17.06.2011, 21:08 #7
Цитата Сообщение от 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
быдлокодер
1703 / 890 / 45
Регистрация: 04.06.2008
Сообщений: 5,489
17.06.2011, 21:19  [ТС] #8
спасибо, пойдёт, но с натягом. Это получается в сопроводительной документации я должен указать, что для использования стандартной функции f(); необходимо помимо включения заголовочного файла в главном определить переменную //#define _USE_FUNC

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

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

0
kravam
быдлокодер
1703 / 890 / 45
Регистрация: 04.06.2008
Сообщений: 5,489
17.06.2011, 21:55  [ТС] #10
Не мне, а конечному пользователю моего проекта.
0
ValeryLaptev
Эксперт С++
1046 / 825 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
17.06.2011, 22:01 #11
kravam, дык мы ж с тобой - конечные пользователи продукта Микрософт! Нам и приходится использовать определенную ими константу.
0
kravam
быдлокодер
1703 / 890 / 45
Регистрация: 04.06.2008
Сообщений: 5,489
17.06.2011, 22:59  [ТС] #12
Так, алё, какая константа?
У меня нет никакой константы определённой мелкомягкими.
Конечный пользователь- это не я, это чел, который будет использовать мой хидер. И чем меньше он будет делать движений, тем лучше

Не по теме:

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

0
grizlik78
Эксперт С++
1971 / 1464 / 122
Регистрация: 29.05.2011
Сообщений: 3,029
17.06.2011, 23:07 #13
Ну а что ещё предложить? Ну есть ещё дедовский проверенный способ — callback-функции.
Пусть пользователь определяет какую хочет функцию и регистрирует её вызовом set_my_own_callback_function(my_func)
Ну а не определит — будет использоваться функция по-умолчанию.
0
kravam
быдлокодер
1703 / 890 / 45
Регистрация: 04.06.2008
Сообщений: 5,489
17.06.2011, 23:22  [ТС] #14
Нельзя ли код? Дело в том, что функция, которую я кропаю и есть callback и она вызывается в хидере так:
C++
1
2
3
main_f (f) {
 f();
}
А если я накропаю в *cpp другую f () то компилятор не схавает определённую в хидере и в *cpp.
Вот я засомневался, а у меня функция ли обратного вызова? Ну да, её имя передаётся параметром в другую функцию и оттуда вызывается. Так ведь?
0
alex_x_x
бжни
2450 / 1655 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
17.06.2011, 23:29 #15
почему вообще в хедере определена функция?
1
17.06.2011, 23:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.06.2011, 23:29
Привет! Вот еще темы с ответами:

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

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

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

как сделать сокращённую ДНФ этой функции - Дискретная математика
F(x1,x2,x3)=(-x1~x2*3)&amp;(x3→-x2)


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

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

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