Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / ПЕРЕДАЧА АДРЕСА СТРУКТУРЫ ФУНКЦИИ / 14 сообщений из 14, страница 1 из 1
29.01.2004, 22:57
    #32392934
GUEST10
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПЕРЕДАЧА АДРЕСА СТРУКТУРЫ ФУНКЦИИ
Подскажите, если умеете ,

1.Имеем структуру:
Код: plaintext
1.
2.
3.
4.
5.
6.
struct funds 
{
char NameBank[ 20 ];
float tax; 
char ViewOfDeposit[ 35 ]; 
float ValueFund; 
} ;

2. Необходимо в функцию summa_2( )
// Передать АДРЕС этой СТРУКТУРЫ
// И найти сумму элементов структуры
// функция возвращает тип float

Код: plaintext
1.
2.
3.
4.
float summa_2(struct funds *money) 
{
float  result = tax + ValueFund; // пускай через точку, а не через указатель ->
return (result );
}

3.Как вызвать функцию summa_2( ) из другой функции ?
...
Рейтинг: 0 / 0
29.01.2004, 23:14
    #32392942
Доброжелатель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПЕРЕДАЧА АДРЕСА СТРУКТУРЫ ФУНКЦИИ
2.
Код: plaintext
1.
2.
3.
float summa_2(struct funds const* money)
{
    return funds->tax + funds->ValueFund;
}


3.
Код: plaintext
1.
2.
3.
4.
5.
6.
    ...
    struct funds f;
    float sum;
    ...
    sum = summa_2(&f);
    ...



Возьми какую-нибудь книгу по C/C++ и почитай на досуге, глядишь вопросы то твои и исчезнут.
...
Рейтинг: 0 / 0
29.01.2004, 23:16
    #32392943
Доброжелатель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПЕРЕДАЧА АДРЕСА СТРУКТУРЫ ФУНКЦИИ
2. Опечатка:
Код: plaintext
1.
2.
3.
float summa_2(struct funds const* money)
{
    return money->tax + money->ValueFund;
}
...
Рейтинг: 0 / 0
30.01.2004, 09:33
    #32393103
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПЕРЕДАЧА АДРЕСА СТРУКТУРЫ ФУНКЦИИ
А почему именно адрес передается через указатель а не через ссылку?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
#include <stdlib.h>
#include <stdio.h>

struct funds 
{
   char NameBank[ 20 ];
   float tax; 
   char ViewOfDeposit[ 35 ]; 
   float ValueFund; 
};


float summa_2(struct funds& money) {
   return money.tax + money.ValueFund;
}

void main() {
   struct funds f;
   f.tax= 100 . 00 ;
   f.ValueFund= 1000 ;
   float res=summa_2(f);
   printf( "%*.*lf\n" , 17 , 2 ,res);
}

           1100 . 00 




ИХМО эффективней...
...
Рейтинг: 0 / 0
30.01.2004, 10:50
    #32393270
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПЕРЕДАЧА АДРЕСА СТРУКТУРЫ ФУНКЦИИ
ну если об эффективности - то эта функция - кандидат в struct members, т.е.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
struct funds 
{
char NameBank[ 20 ];
float tax; 
char ViewOfDeposit[ 35 ]; 
float ValueFund; 

float summa_2()
{
  return (result = tax + ValueFund;);
}
} ;

...
Рейтинг: 0 / 0
30.01.2004, 10:53
    #32393278
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПЕРЕДАЧА АДРЕСА СТРУКТУРЫ ФУНКЦИИ
ну-ну-ну....не пойдет... функция отдельно должна быть
...
Рейтинг: 0 / 0
30.01.2004, 11:28
    #32393346
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПЕРЕДАЧА АДРЕСА СТРУКТУРЫ ФУНКЦИИ
gardenman

Да я не против - но если у функции - есть едиственный параметр - адрес структур - это сразу наводит на определнные мысли - о кривых руках
...
Рейтинг: 0 / 0
30.01.2004, 12:38
    #32393529
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПЕРЕДАЧА АДРЕСА СТРУКТУРЫ ФУНКЦИИ
:-) Эт вы зря на меня наезжаете...)) передавать большое количество
параметров в структуре через ссылку - думаю эт очень правильно...
правда еще б const сделать)

А руки..)) руки я о чугунивую батарею ровнял...) а она ребристая...:-)
...
Рейтинг: 0 / 0
30.01.2004, 13:13
    #32393590
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПЕРЕДАЧА АДРЕСА СТРУКТУРЫ ФУНКЦИИ
gardenman , родной, ктож на вас та наезжает - это я GUEST10 советовал...
...
Рейтинг: 0 / 0
30.01.2004, 17:35
    #32394165
GUEST10
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПЕРЕДАЧА АДРЕСА СТРУКТУРЫ ФУНКЦИИ
Как удалось получить 1100 , когда у меня 5 errors ?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
error C2664: 'summa_2' : cannot convert parameter  1  from 'struct CForAdvancedUsers::OnCallFstruct::funds *' to 'struct funds &'
        A reference that is not to 'const' cannot be bound to a non-lvalue

D:\PLCFSPdb\PLCFSPdb.cpp( 1196 ) : error C2027: use of undefined type 'funds'
        d:\plcfspdb\plcfspdb.h( 123 ) : see declaration of 'funds'
D:\PLCFSPdb\PLCFSPdb.cpp( 1196 ) : error C2228: left of '.tax' must have class/struct/union type
D:\PLCFSPdb\PLCFSPdb.cpp( 1196 ) : error C2027: use of undefined type 'funds'
        d:\plcfspdb\plcfspdb.h( 123 ) : see declaration of 'funds'
D:\PLCFSPdb\PLCFSPdb.cpp( 1196 ) : error C2228: left of '.ValueFund' must have class/struct/union type

PLCFSPdb.exe -  5  error(s),  40  warning(s)


// структура находится в коде щелчка
// на командной кнопке в диадлоговом окне
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
struct funds 

{
   char NameBank[ 20 ];
   float tax; 
   char ViewOfDeposit[ 35 ]; 
   float ValueFund; 
};


// функция summa_2() находится в файле приложения
// с расширением ".cpp" class CPLCFSPdbApp : public CWinApp
Код: plaintext
1.
2.
float summa_2(struct funds& money) {
   return money.tax + money.ValueFund;
	}


Код: plaintext
float summa_2(struct funds& money);  // prototype 
...
Рейтинг: 0 / 0
30.01.2004, 19:40
    #32394260
Доброжелатель
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПЕРЕДАЧА АДРЕСА СТРУКТУРЫ ФУНКЦИИ
2 gardenman
А почему именно адрес передается через указатель а не через ссылку?
[Кусь]
ИХМО эффективней...

Эффективность, только одна, ненужность проверки валидности указателя.

2 funikovyuri
Да я не против - но если у функции - есть едиственный параметр - адрес структур - это сразу наводит на определнные мысли - о кривых руках

Не нужно забыать о главном принципе, принцип минимального и полного интерфейса класса.

2 GUEST10
Ответ был дан в первом же посте:
Возьми какую-нибудь книгу по C/C++ и почитай на досуге, глядишь вопросы то твои и исчезнут.
...
Рейтинг: 0 / 0
30.01.2004, 22:55
    #32394315
GUEST10
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПЕРЕДАЧА АДРЕСА СТРУКТУРЫ ФУНКЦИИ
Повторяю ПОСТ1

Перед выходом на “СУД МАСС”, перепробовал
Тьму вариантов. Кстати, если просто передавать
значения элементов структуры в функцию – всё ОК !
А с АДРЕСОМ – никак! Это пример из ПРАТТА ещё за
1988 год в конце книги, сейчас не под рукой чтобы точно
страницу указать.
Итак , первый вариант подсказки – имеем 5 errors:

Код: plaintext
1.
2.
3.
4.
5.
6.
struct funds 
{
   char NameBank[ 20 ];
   float tax; 
   char ViewOfDeposit[ 35 ]; 
   float ValueFund; 
};


// функция
Код: plaintext
1.
2.
3.
float summa_20(struct funds const* money)
{ 
return (funds->tax + funds->ValueFund);
}

// prototype
Код: plaintext
float summa_20(struct funds const* money); 	
// ВЫЗОВ
Код: plaintext
1.
2.
3.
4.
struct funds f;
float sum1;
f.tax= 100 . 00 ;
f.ValueFund= 1000 ;
sum1 = summa_20(&f);


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
ERRORS:
C:\PLCFSPdb\ForAdvancedUsers.cpp( 1494 ) : error C2664: 'summa_20' : cannot convert parameter  1  from 'struct CForAdvancedUsers::OnCallFstruct::funds *' to 'const struct funds *'
        Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast

error C2027: use of undefined type 'funds'
        c:\plcfspdb\plcfspdb.h( 123 ) : see declaration of 'funds'
C:\PLCFSPdb\PLCFSPdb.cpp( 1206 ) : error C2227: left of '->tax' must point to class/struct/union
C:\PLCFSPdb\PLCFSPdb.cpp( 1206 ) : error C2027: use of undefined type 'funds'
        c:\plcfspdb\plcfspdb.h( 123 ) : see declaration of 'funds'
C:\PLCFSPdb\PLCFSPdb.cpp( 1206 ) : error C2227: left of '->ValueFund' must point to class/struct/union

ПОСЛЕДНИЕ  4  errors относятся к строке  в функции:
	return funds->tax + funds->ValueFund;

Error executing cl.exe.

PLCFSPdb.exe -  5  error(s),
...
Рейтинг: 0 / 0
02.02.2004, 10:41
    #32394951
funikovyuri
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПЕРЕДАЧА АДРЕСА СТРУКТУРЫ ФУНКЦИИ
ну у вас структура funds
объявлена в поле имен/классе/методе CForAdvancedUsers::OnCallFstruct - перенесите объявление в глобальную область видимости и все должно быть ok
...
Рейтинг: 0 / 0
02.02.2004, 16:35
    #32395665
GUEST10
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ПЕРЕДАЧА АДРЕСА СТРУКТУРЫ ФУНКЦИИ
HURA!
It's working.
ALL THANK VERY MUCH !
БОЛЬШОЕ ВСЕМ СПАСИБО,
кто ПОМОГАЛ решить проблемуТЕМА ЗАКРЫТА.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / ПЕРЕДАЧА АДРЕСА СТРУКТУРЫ ФУНКЦИИ / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]