2013-03-04 2 views
0

Я работаю над проектом, и я пытаюсь передать структуру функции, и я пробовал разные способы, но я все еще не знаю. Im получение сообщения об ошибке:Передача структуры функции Visual Studio

незаконное использование этого вида выражения.

Поблагодарите за помощь.

#include <stdio.h> 
    #include <stdlib.h> 
    #include <time.h> 

struct big{ 
     int day; 
     int year; 
     char month[10]; 
     } ; 

     void gen(struct big); 
     void main() 
    { 
int choice; 

printf("\t\t\t\t\t*MENU*\n\n\n"); 
printf("\t\tGenerate Buying/Selling Price-------------------PRESS 1\n\n"); 
printf("\t\tDisplay Foreign Exchange Summary----------------PRESS 2\n\n"); 
printf("\t\tBuy Foreign Exchange----------------------------PRESS 3\n\n"); 
printf("\t\tSell Foreign Exchange---------------------------PRESS 4\n\n"); 
printf("\t\tExit--------------------------------------------PRESS 5\n\n\n\n"); 
printf("\t\tPlease enter your choice"); 
scanf("%d", &choice); 

if (choice == 1) 
{ 
    gen(big); 
} 
system("pause"); 

    } 

void gen(big rec) 
{ 
printf("Enter the date in the format: 01-Jan-1993"); 
scanf("%d %s %d", &rec.day, &rec.month, &rec.year); 
} 
+0

'void main' - это неопределенное поведение. – chris

ответ

2

Вы пытаетесь передать определение структуры самостоятельно, создайте экземпляр, а затем передайте это.

big myBig; 
gen(myBig); 
+0

Большое спасибо Барису. Оно работает. Я хотел бы получить подробное объяснение, поэтому я могу понять, почему он работал, когда я создал какую-то переменную, т. Е. MyBig от большого, а затем используя myBig в вызове функции. Я не понимаю, что вы подразумеваете, создавая экземпляр. –

+0

Часть 'struct big {}' - это просто определение структуры. Вы не можете использовать имя 'big' как переменную. 'big' - это тип типа' int'. Сначала вам нужно создать переменную типа 'big', тогда вы сможете ее использовать. Экземпляр - это просто переменная некоторого типа. –

+0

Спасибо. Определенно прояснилась проблема –

0

a> Объект неструктурирован - объект не создан big. Вы можете сделать это с помощью big obj;

b>void main - это плохой способ программирования. Используйте как минимум int main(void).

с> Pass ссылки вместо копии на стеке

так:

void gen(big& obj) 
{ 
    printf("Enter the date in the format: 01-Jan-1993"); 
    scanf("%d %s %d", &rec.day, &rec.month, &rec.year); 
} 

Вы должны создать объект типа big. struct big - это всего лишь синяя печать дома. В то время как bigObject ниже is дом. Фактическая переменная типа struct big, которая имеет значения HOLDS и т. Д.

#include <stdio.h> 
#include <stdlib.h> 
#include <time.h> 

struct big{ 
    int day; 
    int year; 
    char month[10]; 
}; 

void gen(struct big); 
void main() 
{ 
    int choice; 
    big bigObject; 
    printf("\t\t\t\t\t*MENU*\n\n\n"); 
    printf("\t\tGenerate Buying/Selling Price-------------------PRESS 1\n\n"); 
    printf("\t\tDisplay Foreign Exchange Summary----------------PRESS 2\n\n"); 
    printf("\t\tBuy Foreign Exchange----------------------------PRESS 3\n\n"); 
    printf("\t\tSell Foreign Exchange---------------------------PRESS 4\n\n"); 
    printf("\t\tExit--------------------------------------------PRESS 5\n\n\n\n"); 
    printf("\t\tPlease enter your choice"); 
    scanf("%d", &choice); 

    if (choice == 1) 
    { 
     gen(bigObject); /*pass bigObject to gen*/ 
    } 
    system("pause"); 
    return 0; 
} 

void gen(big& rec) 
{ 
    printf("Enter the date in the format: 01-Jan-1993"); 
    scanf("%d %s %d", &rec.day, &rec.month, &rec.year); 
} 
+0

спасибо. Этот метод является новым, и я пытаюсь его понять. –

+0

Нет ничего особенного. вы создали тип с 'struct', теперь вам нужно определить переменную этого типа. 'big' в вашем коде - это тип. 'bigObject' - это переменная. –

+0

Я сейчас это понимаю. Было бы лучше пройти по ссылке, это, по-видимому, позволит улучшить модульность. Я полагаю, что использование указателей должно делать трюк –

Смежные вопросы