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

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

Восстановить пароль Регистрация
 
 
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 371
15.12.2012, 19:38     Переобъявление функции #1
Не могли бы вы рассказать об архитектуре дополнительных библиотек?
У меня есть главный файл:

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 ); и использовать,будет переобъявление функции.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2012, 19:38     Переобъявление функции
Посмотрите здесь:

C++ Заданы три функции. Определить, являются ли эти функции четными или нечетными
C++ Определить конструкторы, функции-члены установки времени, функции получения часа, минуты и секунд
Одномерный массив и функции (сделать 3 функции ввода/решения/вывода) C++
шаблон функции. Задачей функции является округление вышеуказанного вещественного числа с заданной точностью C++
Написать три функции, которые будут вызываться из функции main() C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
15.12.2012, 19:52     Переобъявление функции #2
Думал думал и ничё не понял, у тебя линковщик что ли на что-то ругается?
если я использую return в meta_function_api , то meta_function_api2 не выполнится
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 371
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 ) в других библиотеках?
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
15.12.2012, 20:52     Переобъявление функции #4
Цитата Сообщение от pEntity Посмотреть сообщение
main_function_api2( phis ); независим от main_function_api( phis ); ?
естественно

Добавлено через 24 минуты
Но у меня осталось впечатление недосказанности. Чё-то мне не нравится всё это дело, код можешь дать?
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 371
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


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

Но как вызвать ClientPutInServer в других файлах?
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
16.12.2012, 15:10     Переобъявление функции #8
Да очень просто всё вызывается:
C++
1
ClientPutInServer (<параметры если есть>);
естественно, ClientPutInServer должна быть объявлена и определена. Давай уж код что ли.
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 371
16.12.2012, 15:20  [ТС]     Переобъявление функции #9
Вот ClientPutInServer регистрируется только в meta_api,я её использую,но в другом файле core.cpp мне тоже надо ClientPutInServer использовать для других нужд.
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 371
16.12.2012, 15:21  [ТС]     Переобъявление функции #10
.....
Вложения
Тип файла: rar zbm3.rar (1.0 Кб, 3 просмотров)
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
16.12.2012, 15:28     Переобъявление функции #11
а где функция main?
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 371
16.12.2012, 16:45  [ТС]     Переобъявление функции #12
Это разработка под игру.

main у меня Meta_Attach,но это не играет роли,помогите решить проблему.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
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 объявления может , но два определения- никогда. Подумай сам, если ты её будешь вызывать, какой именно экземпляр, если их ДВА?
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 371
16.12.2012, 17:06  [ТС]     Переобъявление функции #14
Я понимаю,но как быть,как правильно?
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
16.12.2012, 17:17     Переобъявление функции #15
как-как, ну назови функцию как-нибудь по-другому и всё на этом
C++
1
2
3
4
void ClientPutInServer_ ( edict_t *pEntity )
{
    IS_PLAYER_VALID[ ENTINDEX(pEntity) ] = true;
}
и вся недолга
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 371
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
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
16.12.2012, 17:30     Переобъявление функции #17
Ест две функции x и y, там где нужно вызывать x, вызывай x, где нужно вызывать y вызывай y. Всё!
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 371
16.12.2012, 17:49  [ТС]     Переобъявление функции #18
Нет,функция одна.

void ClientPutInServer( edict_t *pEntity )

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

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

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

Добавлено через 13 минут
Так правильно http://pastebin.com/deMyycfq ,но я думал можно без создания доп функций..Одну использовать как нибудь.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
16.12.2012, 18:08     Переобъявление функции #19
ну вопрос решён? Функцию нельзя переопределить больше одного раза в проекте, это понятно?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2012, 18:15     Переобъявление функции
Еще ссылки по теме:

Перевести с Pascal вычисление функции на заданном промежутке и построить график этой функции C++
C++ Определить типы и функции; в функции main() реализовать демонстрацию работы
C++ Вычисление функции на заданном промежутке, и построение графика этой функции

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

Или воспользуйтесь поиском по форуму:
pEntity
10 / 5 / 1
Регистрация: 12.12.2012
Сообщений: 371
16.12.2012, 18:15  [ТС]     Переобъявление функции #20
Понятно. То есть мое решение полностью гуманное ? Мне кажется можно как-то сделать по умней.

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

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

и т.д.

Какой-то прям быдло код.
Yandex
Объявления
16.12.2012, 18:15     Переобъявление функции
Ответ Создать тему
Опции темы

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