Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C从函数返回结构_C++ - Fatal编程技术网

C++ C从函数返回结构

C++ C从函数返回结构,c++,C++,如果我想将时间作为结构返回,该怎么办?我试过这种方法,但我犯了很多错误 错误:时间=(time1.time::hours+time2.time::hours)中的“operator=”不匹配 注意:时间和时间::运算符=(常数时间和时间) 参数1从'int'到'const Time&'的转换未知。替换: typedef struct { int hours; } Time; Time addTime(Time time1, Time time2) { Time time;

如果我想将时间作为结构返回,该怎么办?我试过这种方法,但我犯了很多错误

错误:时间=(time1.time::hours+time2.time::hours)中的“operator=”不匹配

注意:时间和时间::运算符=(常数时间和时间)

参数1从'int'到'const Time&'的转换未知。

替换:

typedef struct
{
    int hours;
} Time;

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

    time = time1.hours + time2.hours;

    return time;
}

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

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

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

< P> @ Ouah给出了一个完全有效的答案-我只想阐明一个尚未出现的方面。 在您给出的示例中,
struct
非常小—一个
int
。通常,您使用
struct
,因为您有许多“属于一起”的相关字段;从函数返回这样的
struct
,会造成性能损失,因为它会复制堆栈上的所有元素。最好使用指向结构的指针来调用函数——既用于输入,也用于返回值。它可能看起来像这样:

Time time = {time1.hours + time2.hours};
你可以这样称呼它:

typedef struct
{
    int hours;
} Time;

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

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

}

注意-在您的例子中,
int
比指针小,因此您的代码效率更高(bug已修复)。然而,对于任何“实用”的结构,上述方法可能会产生性能效益。

@ USER 985 179 C和C++是两种不同的语言,你不应该这样做。@ USER 985 179是的,但我保证它会咬你。@ USER 958179:“工作就像一个魅力”意味着什么,可能更少。使用C编译器编译C代码。我更喜欢用指针传递结构,但在这种情况下,你应该小心,并用“const”字来假装不希望的变化。从错误消息中,我推断这是C++。
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);