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

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

Войти
Регистрация
Восстановить пароль
 
 
pEntity
11 / 6 / 1
Регистрация: 12.12.2012
Сообщений: 386
#1

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

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

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

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++
Не давно в голову пришла идея переобъявить стандартные типы через union, это может дать возможность обращения к байтам или битам числа, вот...

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
15.12.2012, 19:52     Переобъявление функции #2
Думал думал и ничё не понял, у тебя линковщик что ли на что-то ругается?
если я использую return в meta_function_api , то meta_function_api2 не выполнится
pEntity
11 / 6 / 1
Регистрация: 12.12.2012
Сообщений: 386
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
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
15.12.2012, 20:52     Переобъявление функции #4
Цитата Сообщение от pEntity Посмотреть сообщение
main_function_api2( phis ); независим от main_function_api( phis ); ?
естественно

Добавлено через 24 минуты
Но у меня осталось впечатление недосказанности. Чё-то мне не нравится всё это дело, код можешь дать?
pEntity
11 / 6 / 1
Регистрация: 12.12.2012
Сообщений: 386
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
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
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
11 / 6 / 1
Регистрация: 12.12.2012
Сообщений: 386
16.12.2012, 15:05  [ТС]     Переобъявление функции #7
Мне надо и в core и в meta_api делать манипуляции с ClientPutInServer

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

main у меня Meta_Attach,но это не играет роли,помогите решить проблему.
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
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
11 / 6 / 1
Регистрация: 12.12.2012
Сообщений: 386
16.12.2012, 17:06  [ТС]     Переобъявление функции #14
Я понимаю,но как быть,как правильно?
kravam
быдлокодер
1693 / 880 / 44
Регистрация: 04.06.2008
Сообщений: 5,438
16.12.2012, 17:17     Переобъявление функции #15
как-как, ну назови функцию как-нибудь по-другому и всё на этом
C++
1
2
3
4
void ClientPutInServer_ ( edict_t *pEntity )
{
    IS_PLAYER_VALID[ ENTINDEX(pEntity) ] = true;
}
и вся недолга
Yandex
Объявления
16.12.2012, 17:17     Переобъявление функции
Ответ Создать тему
Опции темы

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