Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
327 / 252 / 58
Регистрация: 12.12.2012
Сообщений: 2,048
1

Переобъявление функции

15.12.2012, 19:38. Показов 1633. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Не могли бы вы рассказать об архитектуре дополнительных библиотек?
У меня есть главный файл:

main_function.cpp

Только в нем регистрируется нужная мне функция:

C++
1
2
3
4
void main_spawn( void * phis )
{
      // code 
}
Далее у меня есть:

main_function_api.cpp
main_function_api2.cpp

Мне необходимо в этих библиотеках использовать функцию void main_function( void * phis ) из meta_function.cpp,но мы тут не можем регистрировать ее,поэтому в main_function( void * phis ) я добавляю две функции:

C++
1
2
3
4
5
void main_function( void * phis )
{
    main_function_api( phis );
    main_function_api2( phis );
}
Объявлю в meta_function.h

C++
1
2
void meta_function_api( void * phis );
void meta_function_api2( void * phis );
Буду его подключать и использовать эти функции в моих api файлах,но мне кажется это неправильно,если я использую return в meta_function_api , то meta_function_api2 не выполнится,то как же правильней использовать одну функцию для разных файлов,которая исполняется 1 раз,а функции должна выполнять разные,в других библиотеках.
Возможно нужно создать какую либо регистрацию с главной функции,но как?

Что посоветуете?
[/QUOTE]

То есть выражаясь проще,

C++
1
2
3
4
void main_spawn( void * phis )
{
      // code 
}
Как вызывать его в разных библиотеках,если он зарегистрирован только в главной билотеке ?


Если сделать так:


C++
1
2
3
4
void main_spawn( void * phis )
{
      spawn( phis );
}
Объявлять в других файлах spawn( void * phis ); и использовать,будет переобъявление функции.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.12.2012, 19:38
Ответы с готовыми решениями:

Переобъявление стандартных типов C++
Не давно в голову пришла идея переобъявить стандартные типы через union, это может дать возможность...

Переобъявление массивов
Не уверен, что правильно назвал тему, но ничего другого не придумалось. Вопрос дилетанта-практика,...

Переобъявление массива сохраняя данные в нём.
Здравствуйте, как мне в С# переобъявить одномерный массив, добавив в него один элемент и сохранить...

Функции. Как после одного возвратного значения функции отталкиваться от возврата другой функции
Написал код, в котором 2 функции одна возвращает стринговое значение, вторая должна бы вернуть...

20
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
15.12.2012, 19:52 2
Думал думал и ничё не понял, у тебя линковщик что ли на что-то ругается?
если я использую return в meta_function_api , то meta_function_api2 не выполнится
1
327 / 252 / 58
Регистрация: 12.12.2012
Сообщений: 2,048
15.12.2012, 20:15  [ТС] 3
C
1
2
3
4
5
void main_function( void * phis )
{
    main_function_api( phis );
    main_function_api2( phis );
}
main_function_api2( phis ); независим от main_function_api( phis ); ?

Если не понятно,то просто,как использовать void main_function( void * phis ) в других библиотеках?
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
15.12.2012, 20:52 4
Цитата Сообщение от pEntity Посмотреть сообщение
main_function_api2( phis ); независим от main_function_api( phis ); ?
естественно

Добавлено через 24 минуты
Но у меня осталось впечатление недосказанности. Чё-то мне не нравится всё это дело, код можешь дать?
1
327 / 252 / 58
Регистрация: 12.12.2012
Сообщений: 2,048
16.12.2012, 01:35  [ТС] 5
Есть meta_api.cpp

В нем зарегана и использована функция


C
1
2
3
void ClientPutInServer( edict_t *pEntity )
{
}

Подключаю core.cpp

В нем мне тоже нажна эта функция

делаю так


C
1
2
3
4
5
6
extern void ClientPutInServer( edict_t *pEntity );
 
void ClientPutInServer( edict_t *pEntity )
{
 
}
Ошибка


1>meta_api.obj : error LNK2005: "void __cdecl ClientPutInServer(struct edict_s *)" (?ClientPutInServer@@YAXPAUedict_s@@@Z) уже определен в core.obj


Как применять одну и ту же функцию в разных файлах?
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
16.12.2012, 02:20 6
Вопрос номер один, объясни мне зачем ты переопределяешь функцию ClientPutInServer в core.cpp? У тебя есть два разных файла meta_api.cpp и core.cpp, оба подключены в проект. Так ты зачем в них обоих определяешь функцию, объясни мне? Это неразумно с точки зрения человека и неправильно с точки зрения компилятора.. Оставь это определение:
C++
1
2
3
4
void ClientPutInServer( edict_t *pEntity )
{
 
}
в каком-нибудь ОДНОМ файле и будет тебе счастье
0
327 / 252 / 58
Регистрация: 12.12.2012
Сообщений: 2,048
16.12.2012, 15:05  [ТС] 7
Мне надо и в core и в meta_api делать манипуляции с ClientPutInServer

Но как вызвать ClientPutInServer в других файлах?
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
16.12.2012, 15:10 8
Да очень просто всё вызывается:
C++
1
ClientPutInServer (<параметры если есть>);
естественно, ClientPutInServer должна быть объявлена и определена. Давай уж код что ли.
1
327 / 252 / 58
Регистрация: 12.12.2012
Сообщений: 2,048
16.12.2012, 15:20  [ТС] 9
Вот ClientPutInServer регистрируется только в meta_api,я её использую,но в другом файле core.cpp мне тоже надо ClientPutInServer использовать для других нужд.
0
327 / 252 / 58
Регистрация: 12.12.2012
Сообщений: 2,048
16.12.2012, 15:21  [ТС] 10
.....
Вложения
Тип файла: rar zbm3.rar (1.0 Кб, 4 просмотров)
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
16.12.2012, 15:28 11
а где функция main?
0
327 / 252 / 58
Регистрация: 12.12.2012
Сообщений: 2,048
16.12.2012, 16:45  [ТС] 12
Это разработка под игру.

main у меня Meta_Attach,но это не играет роли,помогите решить проблему.
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
16.12.2012, 16:57 13
Ну ты неправильно делаешь. В одном файле:
C++
1
2
3
4
5
6
7
void ClientPutInServer( edict_t *pEntity )
{
    ClearBits( g_bsIsAlive,  ENTINDEX( pEntity )  );
    SetBits( g_bsIsConnected, ENTINDEX( pEntity )  );
    ClearBits( g_bsIsZombie, ENTINDEX( pEntity )  );
    ClearBits( g_bsIsHostZombie, ENTINDEX( pEntity )  );
}
и в другом

C++
1
2
3
4
void ClientPutInServer( edict_t *pEntity )
{
    IS_PLAYER_VALID[ ENTINDEX(pEntity) ] = true;
}
а потом эти файлы собираешь в один проект.
Так дело не пойдёт, не может быть два определения у функции. НЕ МОЖЕТ. 2 объявления может , но два определения- никогда. Подумай сам, если ты её будешь вызывать, какой именно экземпляр, если их ДВА?
0
327 / 252 / 58
Регистрация: 12.12.2012
Сообщений: 2,048
16.12.2012, 17:06  [ТС] 14
Я понимаю,но как быть,как правильно?
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
16.12.2012, 17:17 15
как-как, ну назови функцию как-нибудь по-другому и всё на этом
C++
1
2
3
4
void ClientPutInServer_ ( edict_t *pEntity )
{
    IS_PLAYER_VALID[ ENTINDEX(pEntity) ] = true;
}
и вся недолга
0
327 / 252 / 58
Регистрация: 12.12.2012
Сообщений: 2,048
16.12.2012, 17:19  [ТС] 16
C
1
2
3
4
5
6
7
void ClientPutInServer( edict_t *pEntity )
{
    ClearBits( g_bsIsAlive,  ENTINDEX( pEntity )  );
    SetBits( g_bsIsConnected, ENTINDEX( pEntity )  );
    ClearBits( g_bsIsZombie, ENTINDEX( pEntity )  );
    ClearBits( g_bsIsHostZombie, ENTINDEX( pEntity )  );
}
переименовать ClientPutInServer ? А как оно поймет,что нужно вызывать сам ClientPutInServer
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
16.12.2012, 17:30 17
Ест две функции x и y, там где нужно вызывать x, вызывай x, где нужно вызывать y вызывай y. Всё!
0
327 / 252 / 58
Регистрация: 12.12.2012
Сообщений: 2,048
16.12.2012, 17:49  [ТС] 18
Нет,функция одна.

void ClientPutInServer( edict_t *pEntity )

Она в таком виде зарегана в meta_api и ни как иначе не может быть.

Мне её действие нужно отловить просто в разных файлах..А не только в самом meta_api

Покажите,что вы имеете в виду в прикрепленном архиве выше,я не понимаю.

Добавлено через 13 минут
Так правильно http://pastebin.com/deMyycfq ,но я думал можно без создания доп функций..Одну использовать как нибудь.
0
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,679
16.12.2012, 18:08 19
ну вопрос решён? Функцию нельзя переопределить больше одного раза в проекте, это понятно?
0
327 / 252 / 58
Регистрация: 12.12.2012
Сообщений: 2,048
16.12.2012, 18:15  [ТС] 20
Понятно. То есть мое решение полностью гуманное ? Мне кажется можно как-то сделать по умней.

Если у меня 20 файлов где нужна эта функция,что мне 20 раз писать

void func2( edict_t *pEntity );
void func3( edict_t *pEntity );
void func4( edict_t *pEntity );

и т.д.

Какой-то прям быдло код.
0
16.12.2012, 18:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.12.2012, 18:15
Помогаю со студенческими работами здесь

excel. создать таблицу значение кусочно-непрерывной функции y на интервале [xmin; xmax] с шагом h, для расчета функции y используя логические функции

вычислить сумму значений функции у и найти минимальное и максимальное значение функции
здравствуйте)) помогите, пожалуйста, составить программу:help: найти сумму значений функции от а=4...

Вычислить где значение функции меняет знак(отделение корней функции)
Имеется следующая функция f(x)=sqrt(4*x+7)-3*cos(x) Нужно написать программу, где будет выводится...

Табулирование заданной функции и определение максимального и минимального значения функции в таблице
Ребята, помогите пожалуйста решить последнюю задача, прямо совсем не как! Разработать консольное...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru