0

このコードの何が問題なのかわかりません。「私の関数には不完全な型は許可されていません」と表示されます。

これは私がやろうとしていることです:

yrClac()世紀の変わり目 (2000 年 1 月 1 日) からの合計日数を表す整数パラメーターと、年、月、日という名前の参照パラメーターを持つという名前の関数を作成します。この関数は、渡された指定された日数の現在の年、月、日を計算することです。参照を使用して、関数は呼び出し元の関数のそれぞれの実引数を直接変更する必要があります。この問題では、1 年は常に 365 日で、毎月はちょうど 30 日であると仮定します。

#include <iostream>

using namespace std;

void yrClac(int total, int &a, int &b, int &c);  // says incomplete type
                                                 // is not allowed

int main()
{
    int totaldays;
    cin >> totaldays;

    int year = 2000, month = 1, day = 1;
    void yrClac(totaldays, year, month, day);
    cout << year << month << day;

    system ("PAUSE");
    return 0;
}

void yrClac(int total, int &a, int &b, int &c)
{
    a = 365 / total;
    b = total - a * 12;
    c = total - b * 30;
}
4

4 に答える 4

4

void関数を呼び出すときに (別名、戻り値の型) を配置しないでください。それを削除するとvoid yrClac(totaldays, year, month, day);、動作するはずです。

于 2012-04-18T02:39:31.320 に答える
3

void yrClac(totaldays, year, month, day);totaldaysタイプ、yearmonthのオブジェクトをパラメーターとして受け取る関数を宣言しdayます。(これらの型は宣言されていないため、「不完全な型」に関するコンパイル エラー メッセージが表示されます)。

yrCalcオーバーロードするのではなく、を呼び出したいので、使用しますyrClac(totaldays, year, month, day)(つまり、 を削除しますvoid)。

于 2012-04-18T02:40:28.913 に答える
2

コードの明らかな問題。

あなたの中main()にこの宣言があります

void yrClac(totaldays,year,month,day);

削除するvoid

もう 1 つの潜在的な問題は、切り捨て365/total が原因で発生する可能性が最も高い0(合計が 365 より大きい場合) doublefortotalまたは型キャストのいずれかを使用することをお勧めします。

于 2012-04-18T02:39:47.723 に答える
1
int year=2000, month=1, day=1;

void yrClac(totaldays, year, month, day);

cout << year << month << day;

「void」を削除すると正しく機能します。呼び出しメソッドは、どのタイプを返す必要があるかを指示する必要はありません。

于 2012-04-18T02:46:14.323 に答える