Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.11.2011, 21:45   #1
somwan
Пользователь
 
Регистрация: 05.11.2008
Сообщений: 33
По умолчанию функция получающая указатель на структуру

Доброго времени суток уважаемые!

Прошу помощи в интерисующем меня вопросе.
Работаю в borlanc C 3.1
Есть проэкт, состоящий из двух файлов file_1.cpp file_2.cpp. В file_1.cpp находится функция main(), до неё объявлен шаблон структуры str. Внутри main() обявлен экземпляр структуры str - exemp_1. Во втором файле file_2.cpp находится функция funkciy(), которая должна получать в качестве входного параметра адрес экземпляра структуры exemp_1. Вопрос заключается в следующем: как написать в самой функции для того чтобы она получала требуемый адрес. Т.е. если бы мне надо было чтобы функция получала адрес переменной int per_1 , то это выглядело бы так: funkciy(int *per_1). Т.е. мне непонятно как обявить параметром функции получение адреса на некоторую структуру.

Код:
struct str {

int a;
int b;

};

void main(){

str exemp_1;//экземпляр структуры str

 funkciy(&exemp_1);//функция расположенная в file_2.cpp

}
somwan вне форума Ответить с цитированием
Старый 20.11.2011, 21:52   #2
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Точно также, как и для типа int.

Если на С пишите, то параметр функции должен быть объявлен в ней как

struct str *parameter

Если пишите на С++, то он может быть объявлен точно также, как на С, либо без ключевого слова struct

str *parameter
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Старый 20.11.2011, 22:00   #3
somwan
Пользователь
 
Регистрация: 05.11.2008
Сообщений: 33
По умолчанию

вы правы, однако это справедливо только если реализация функции находится в том же файле, в котором объявлен экземпляр структуры, ну или в подключённой библиотеке H. А вот если функция в другом файле cpp, который является частью проекта, и в котором никто знать не знает про объявленный в main() шаблон функции. обявить же этот шаблон повторно в файле с функцией нельзя. Непонятно как туть быть.
somwan вне форума Ответить с цитированием
Старый 20.11.2011, 22:10   #4
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от somwan Посмотреть сообщение
вы правы, однако это справедливо только если реализация функции находится в том же файле, в котором объявлен экземпляр структуры, ну или в подключённой библиотеке H. А вот если функция в другом файле cpp, который является частью проекта, и в котором никто знать не знает про объявленный в main() шаблон функции. обявить же этот шаблон повторно в файле с функцией нельзя. Непонятно как туть быть.
Очевидно, что если вы хотите в другом файле объявить функцию, которая будет принимать в качестве параметра указатель на вашу структуру, то следует эту же структуру объявить в том файле.
Кроме того, в файле, гда находится main должна быть объявлена функция, которую вы вызываете.

Делается это следующим образом. Объявление структуры и соответствующей функции помещается в заголовочный файл, а затем этот заголовочный файл включается в каждый модуль, где эта структура или функция используются. Пример такого заголовочного файла

Код:
#ifndef    MY_HEADER
#define   MY_HEADER

struct str
{
   int a;
   int b;
};

void func( struct str * );

#endif   /* MY_HEADER */
Со мной можно встретиться на www.clipper.borda.ru
Сыроежка вне форума Ответить с цитированием
Старый 20.11.2011, 22:14   #5
somwan
Пользователь
 
Регистрация: 05.11.2008
Сообщений: 33
По умолчанию

столкнулся с этим вопросом только сегодня, поэтому вероятно неточно задал вопрос. Суть в том что неоторая структура, например atr, шаблон которой объявлен, представляет собой пользовательский тип данных, который позволяет объявлять экземпляры этой структуры. По типу str exempliar_1. Это работает когда экземпляр и шаблон обявляются в одном файле. А вот как быть если в проэкте несколько файлов, шаблон объявлен в одном, а объявление экземпляра требуется в другом файле.
somwan вне форума Ответить с цитированием
Старый 20.11.2011, 22:24   #6
Сыроежка
Форумчанин
 
Регистрация: 01.07.2011
Сообщений: 423
По умолчанию

Цитата:
Сообщение от somwan Посмотреть сообщение
столкнулся с этим вопросом только сегодня, поэтому вероятно неточно задал вопрос. Суть в том что неоторая структура, например atr, шаблон которой объявлен, представляет собой пользовательский тип данных, который позволяет объявлять экземпляры этой структуры. По типу str exempliar_1. Это работает когда экземпляр и шаблон обявляются в одном файле. А вот как быть если в проэкте несколько файлов, шаблон объявлен в одном, а объявление экземпляра требуется в другом файле.
Я вам все ответил! Перечитайте еще раз, что я вам написал! Для компилятора не важно, сколько и где вы создаете объекты своей структуры. Ему важно в каждом модуле, где он использует объекты вашей структуры, видеть объявление этого типа и объявления функций, которые используются с этим типом.
Со мной можно встретиться на www.clipper.borda.ru

Последний раз редактировалось Сыроежка; 20.11.2011 в 22:39.
Сыроежка вне форума Ответить с цитированием
Старый 20.11.2011, 22:42   #7
somwan
Пользователь
 
Регистрация: 05.11.2008
Сообщений: 33
По умолчанию

хорошо, спасибо за помощь. Пойду разбираться.
somwan вне форума Ответить с цитированием
Старый 21.11.2011, 21:30   #8
somwan
Пользователь
 
Регистрация: 05.11.2008
Сообщений: 33
По умолчанию

Сыроежка, благодарю за помощь! Вы оказалиь правы, а я просто устал и сразу невъехал. Проблема решена, ошибка осознана, СПАСИБО.
somwan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Указатель на функцию и функция-член Granus Общие вопросы C/C++ 3 25.08.2011 13:20
Функция возвращающая указатель ]tach[ Общие вопросы C/C++ 1 19.01.2011 14:35
Указатель на структуру.Инициализация функцией. Aleksandr_Yanov Общие вопросы C/C++ 3 31.10.2010 16:36
программа получающая данные с сайта пауэрлифтинг Работа с сетью в Delphi 1 08.03.2010 19:07