2013-11-12 6 views
-1
typedef struct 
{ 
    int hours; 
} Time; 

Time addTime(Time time1, Time time2) 
{ 
    Time time; 

    time = time1.hours + time2.hours; 

    return time; 
} 

Как это сделать, если я хочу вернуть время в виде структуры? Я пробовал этот путь, но я получаю ошибки от ошибок.C return struct from function

error: no match for 'operator=' in 'time = (time1.Time::hours + time2.Time::hours)'

note: Time& Time::operator=(const Time&)

no known conversion for argument 1 from 'int' to 'const Time&'

+1

Из сообщений об ошибках я делаю вывод, что это C++. – alk

ответ

4

Заменить:

time = time1.hours + time2.hours; 

от

time.hours = time1.hours + time2.hours; 

или начиная с С99 просто инициализировать его при объявлении:

Time time = {time1.hours + time2.hours}; 

Пожалуйста, обратите внимание которого вы отметили вопрос, как C, но вы используете C++ компилятор.

+0

Я использую gC++, но пишу c-код. – user2985179

+0

@ user2985179 C и C++ - это два разных языка, вы не должны этого делать. – ouah

+2

Im плохая задница и ее работающая как шарм – user2985179

0

@Ouah дал совершенно верный ответ - я просто хочу осветить один аспект, который еще не появился.

В примере, который вы приводите, struct очень маленький - один int. Обычно вы используете struct, потому что у вас есть ряд связанных полей, которые «принадлежат друг другу»; существует штраф за выполнение для возврата такого struct из функции, поскольку он сделает копию всех элементов в стеке. Было бы предпочтительнее позвонить вашей функции с помощью указателей на структуры - как для входов, так и для возвращаемого значения. Это может выглядеть примерно так:

typedef struct 
{ 
    int hours; 
} Time; 

void addTime(Time *time1, Time *time2, Time *sumTime) 
{ 

    sumTime->hours = time1->hours + time2->hours; 

} 

И вы могли бы назвать его:

time1.hours = 4; 
time2.hours = 5; 
Time totalTime; 
addTime(&time1, &time2, &totalTime); 
printf("The total time is %d hours\n", totalTime.hours); 

Примечание - в вашем случае, int меньше указателя, так что ваш код будет более эффективным (с исправлена ​​ошибка). Однако для любой «практической» структуры вышеупомянутый метод, вероятно, даст преимущество в производительности.

+1

Согласен. Я предпочитаю передавать структуры указателями, но в этом случае вы всегда должны быть осторожны и использовать слово «const», чтобы притворяться нежелательными изменениями. – Deck