typedef struct
{
int hours;
} Time;
Time addTime(Time time1, Time time2)
{
Time time;
time = time1.hours + time2.hours;
return time;
}
如果我想将时间作为结构返回怎么办?我试过这种方式,但我得到了一些错误。
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&'
答案 0 :(得分:4)
替换:
time = time1.hours + time2.hours;
通过
time.hours = time1.hours + time2.hours;
或从C99开始只是在声明时初始化它:
Time time = {time1.hours + time2.hours};
另请注意,您将问题标记为C,但您使用的是C ++编译器。
答案 1 :(得分:0)
在您提供的示例中,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
小于指针,因此您的代码更有效(修复了错误)。但是,对于任何“实用”结构,上述方法可能会产生性能优势。