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

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

Войти
Регистрация
Восстановить пароль
 
 
pEntity
30 / 25 / 3
Регистрация: 12.12.2012
Сообщений: 678
#1

Регистрация функций - C++

08.02.2013, 23:00. Просмотров 865. Ответов 26
Метки нет (Все метки)

Здравствуйте. Я разрабатываю модуль под игру.

Мой проект достаточно большой.

Вот у меня вопрос. У меня есть главный файл cpp

Он регистрирует функцию момента,когда игрок заходит на сервер,тобиш у меня в main.cpp

Функция:

C++
1
2
3
4
void Connect( edict_t *Player )
{
 //code..
}
Например использую:

C++
1
2
3
4
5
6
bool g_bsIsConnected[ 33 ] = false;
 
void Connect( edict_t *Player )
{
 g_bsIsConnected[ Player ] = true;
}
Так вот,сама функция Connect зарегистрирована только в main.cpp

А мне нужно использовать функцию Connect в других срр файлах проекта,где мне надо пользоваться ею,как на примере выше.Может вы скажите,делай всё в одном файле или типа быдло кода

C++
1
2
3
4
5
void Connect( edict_t *pPlayer )
{
 Connect_fot_othetcpp1( pPlayer );
 Connect_fot_othetcpp2( pPlayer );
}
объявлять и использовать эти трансфер функции в других срр файлах,но мне бы хотелось,чтоб была возможность их регистрировать как-то,что можно сделать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.02.2013, 23:00
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Регистрация функций (C++):

Итерационные циклы,Определение и вызов функций,Использование библиотечных функций stdio.h - C++
Помогите решить задания: 1.Дано натуральное число n. Найти разность между первой цифрой этого числа и суммой всех остальных. ...

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

Объявление функций внутри других функций - C++
Иногда вижу в некоторых исходниках на c объявление функций, внутри main. Например: main(){ double sum(int max_num); } ...

Вызов функций внутри других функций - C++
#include "stdafx.h" #include "stdio.h" #include <iostream> #include <fstream> #include <iomanip> using namespace std; ...

функции класса раздела private реализуються так же как и раздела public? в смысле виртуальных функций, дружественных функций, и т.д. - C++
функции класса раздела private реализуються так же как и раздела public? в смысле виртуальных функций, дружественных функций, и т.д.

Использование функций и шаблонов функций - C++
Составьте программу – формирование цены на молоко. Животновод в начале каждой зимы цену на молоко на р%, а каждым летом снижает на столько...

26
Пёс
228 / 76 / 4
Регистрация: 03.02.2013
Сообщений: 311
08.02.2013, 23:03 #2
Почему бы не создать ещё один cpp файл персонально под вашу функцию? И инклюдить его там, где надо.
1
pEntity
30 / 25 / 3
Регистрация: 12.12.2012
Сообщений: 678
08.02.2013, 23:06  [ТС] #3
Да,это решение,но есть и другие функции,намного большие и сильно различающиеся и пихать всё в один файл,не слишком удобно. Поэтому некая регистрация,вызова моей функции решила бы все проблемы.
0
abit
272 / 271 / 36
Регистрация: 03.02.2013
Сообщений: 770
08.02.2013, 23:06 #4
если я верно уловил суть проблемы, то отца русской демократии спасёт слово

C++
1
extern void Connect( edict_t *Player )
в каждом файле, где она нужна
1
pEntity
30 / 25 / 3
Регистрация: 12.12.2012
Сообщений: 678
08.02.2013, 23:10  [ТС] #5
Как мне extern поможет? extern будет эффективен,если я буду все скидывать в один срр файл с моей функцией.

Но у меня много различных функции,которые везде используются.
0
abit
272 / 271 / 36
Регистрация: 03.02.2013
Сообщений: 770
08.02.2013, 23:13 #6
Цитата Сообщение от pEntity Посмотреть сообщение
Как мне extern поможет? extern будет эффективен,если я буду все скидывать в один срр файл с моей функцией.

Но у меня много различных функции,которые везде используются.
значит сорри, я не уловил ход ваших мыслей, мне казалось вас устроит сделать какой-нить .h файл и туда накидать список всех своих функций c приставкой extern, а потом его инклудить...
но нет так нет (
я мало понимаю в вашей огранизации файлов, просто о своём подумал...
1
pEntity
30 / 25 / 3
Регистрация: 12.12.2012
Сообщений: 678
08.02.2013, 23:19  [ТС] #7
Нет,если бы можно было так:

В Client.h файл extern void Connect( edict_t *pPlayer );

А дальше во всех срр пользоваться им,было бы просто идеально,но ведь как мы знаем,будет переобъявление функции.

Добавлено через 3 минуты
Хочу предупредить,что я с С++ на Вы,я читал в интернете статьи и интересную книгу "Объектно-ориентированное программирование в C++."

Знания есть,их достаточно для моих нужд,но вот моя тема меня мучает,как составить ООП,где нужно использовать в разных срр,одинаковые функции,только своя регистрация..
0
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
08.02.2013, 23:21 #8
pEntity, какое переобъявление? Это всего лишь заголовок, который _ни к чему_ не обязывает. Он лишь для того, что бы компилятор понял, что вызываемая функция где-то да есть.
1
abit
272 / 271 / 36
Регистрация: 03.02.2013
Сообщений: 770
08.02.2013, 23:24 #9
переобъявления не должно быть в любом случае, т.к ни один заголовочный файл вообще не должен дважды включаться ни в одну единицу компиляции. (#pragma once поставить не забудьте, или ifdef-ами окаймить)

но если говорить об ООП - то по феншую будет так - разбить всё на классы и вызывать как-то типа NewPlayer.Conect;
1
pEntity
30 / 25 / 3
Регистрация: 12.12.2012
Сообщений: 678
08.02.2013, 23:25  [ТС] #10
Подождите,смотрите.

В client.h

Екстерню свою функцию
C++
1
extern void Connect( edict_t *pPlayer );
Дальше я хочу её использовать в file1.cpp

Подключаю client.h

Без проблем использую

C++
1
2
3
4
void Connect( edict_t *pPlayer )
{
//code
}
Это без проблем,я понимаю,но

file2.cpp

Подключаю client.h

использую

C++
1
2
3
4
void Connect( edict_t *pPlayer )
{
//code
}
Компилятор мне скажит,что функция Connect переобъявлена или выдаст еще какую либо ошибку,так как не может быть две одинаковые функции.
0
abit
272 / 271 / 36
Регистрация: 03.02.2013
Сообщений: 770
08.02.2013, 23:27 #11
Цитата Сообщение от pEntity Посмотреть сообщение
Компилятор мне скажит,что функция Connect переобъявлена или выдаст еще какую либо ошибку,так как не может быть две одинаковые функции.
#pragma once поставить не забудьте, или ifdef-ами окаймить
типа так:
C++
1
2
3
4
5
6
#ifndef GUARD_Client_h
#define GUARD_Client_h
 
... пошёл код ...
 
#endif
1
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
08.02.2013, 23:27 #12
pEntity,
две одинаковых функции быть не может, но
1) срр компилируется отдельно, между собой они не связываются
2) функция и прототип функции - не одно и то же
1
pEntity
30 / 25 / 3
Регистрация: 12.12.2012
Сообщений: 678
08.02.2013, 23:33  [ТС] #13
>file1.obj : error LNK2005: "void __cdecl Connect(void)" (?Connect@@YAXXZ) уже определен в file2.obj

Вот как я выше и написал.
0
Kgfq
74 / 37 / 2
Регистрация: 23.09.2012
Сообщений: 408
08.02.2013, 23:35 #14
pEntity, а что если extern убрать

Добавлено через 27 секунд
Да и к тому же, непонятны, прилепили ли вы реализацию функций или только прототипы
0
pEntity
30 / 25 / 3
Регистрация: 12.12.2012
Сообщений: 678
08.02.2013, 23:36  [ТС] #15
Ошибка не изменилась.
0
08.02.2013, 23:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.02.2013, 23:36
Привет! Вот еще темы с ответами:

Использование функций и шаблонов функций - C++
Люди помогите пожалуйста буду очень благодарна) вобщем вот первая часть лабы Написать программу, функция main которой включает...

Перегрузка функций. Реализация функций - C++
Разработать функцию f(x) , которая возвращает младшую цифру натурального числа x . Вычислить с ее помощью значение выражения z= f(a) +...

Регистрация в программе - C++
Подскажите, как реализовать регистрацию в программе, по серийному номеру?

Регистрация и вход в программу С++ - C++
Нужно реализовать авторизацию для входа в систему (без регистрации на входе, т.к создание новых уч записей выполняет администратор после...


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

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

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