-1
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&'

4

2 回答 2

4

代替:

 time = time1.hours + time2.hours;

经过

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

或从 C99 开始,只需在声明时初始化它:

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

另请注意,您将问题标记为 C,但您使用的是 C++ 编译器。

于 2013-11-12T23:22:06.973 回答
0

@Ouah 给出了一个完全有效的答案——我只想说明一个尚未出现的方面。

在您给出的示例中,struct非常小 - 单个int. 通常,您使用 a 是struct因为您有许多“属于一起”的相关字段;从函数返回这样的 a 会降低性能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);

注意 - 在您的情况下, anint小于指针,因此您的代码更有效(修复了错误)。但是,对于任何“实用”的结构,上述方法可能会产生性能优势。

于 2013-11-13T00:08:25.470 回答