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

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

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

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

15.12.2012, 19:38. Просмотров 815. Ответов 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 ); и использовать,будет переобъявление функции.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2012, 19:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Переобъявление функции (C++):

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

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

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

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

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

Для функции y=f(x) получить таблицу значений и график этой функции на отрезке - Pascal ABC
Для функции y=f(x) получить таблицу значений и график этой функции на отрезке. Количество точек на промежутке задается пользователем....

20
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
15.12.2012, 19:52 #2
Думал думал и ничё не понял, у тебя линковщик что ли на что-то ругается?
если я использую return в meta_function_api , то meta_function_api2 не выполнится
1
pEntity
12 / 7 / 1
Регистрация: 12.12.2012
Сообщений: 425
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
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
15.12.2012, 20:52 #4
Цитата Сообщение от pEntity Посмотреть сообщение
main_function_api2( phis ); независим от main_function_api( phis ); ?
естественно

Добавлено через 24 минуты
Но у меня осталось впечатление недосказанности. Чё-то мне не нравится всё это дело, код можешь дать?
1
pEntity
12 / 7 / 1
Регистрация: 12.12.2012
Сообщений: 425
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
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
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
pEntity
12 / 7 / 1
Регистрация: 12.12.2012
Сообщений: 425
16.12.2012, 15:05  [ТС] #7
Мне надо и в core и в meta_api делать манипуляции с ClientPutInServer

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

main у меня Meta_Attach,но это не играет роли,помогите решить проблему.
0
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
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
pEntity
12 / 7 / 1
Регистрация: 12.12.2012
Сообщений: 425
16.12.2012, 17:06  [ТС] #14
Я понимаю,но как быть,как правильно?
0
kravam
быдлокодер
1700 / 887 / 45
Регистрация: 04.06.2008
Сообщений: 5,498
16.12.2012, 17:17 #15
как-как, ну назови функцию как-нибудь по-другому и всё на этом
C++
1
2
3
4
void ClientPutInServer_ ( edict_t *pEntity )
{
    IS_PLAYER_VALID[ ENTINDEX(pEntity) ] = true;
}
и вся недолга
0
16.12.2012, 17:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2012, 17:17
Привет! Вот еще темы с ответами:

Значение функции от пересечения множество в равно пересечению значений функции от множеств - Логика и множества
Аллах велик! Нужно доказать вот эту штуку: \phi \left(\bigcap_{0}^{n}Ai \right) = \bigcap_{0}^{n} \phi \left(Ai \right), i\in \left(0,...n...

Найти значения функции в заданных точках и сравнить с истинными значениями функции - MathCAD
Доброго времени суток друзья. линейная интерполюция , интерполюция сплайнами , глобальная интерполюция, метод наименьших квадратов ...

Найти среднее арифметическое значений функции f(x) в точках а, b, (a+b)/2, используя обращение к функции - C++
Найти среднее арифметическое значений функции f(x) в точках а, b, (a+b)/2, используя обращение к функции. f=arctgx+ln^2 x^2 Нужно...

Процедуры и функции: вычислить значения функции на заданном отрезке с заданным шагом - Pascal
ребята, помогите, пожалуйста! Срочно нужна такая программка по выделенному варианту... у самой никак не получается( очень рассчитываю...


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

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

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