-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. 通常、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 に答える