2012-04-18 4 views
0

このコードで何が問題なのか分かりません。 「不完全なタイプは私の機能には許されていません」と書かれています。どうしたの?不完全な型は許可されていませんか?

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

は総世紀の変わり目からの日数(2000年1月1日)と参照パラメータを表す整数パラメータを持つyrClac()という名前の関数を書きます年、月、日と呼ばれる。関数は、渡された日数の現在の年、月、日を計算することです。参照を使用すると、関数は呼び出し関数内のそれぞれの実際の引数を直接変更する必要があります。この問題については、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; 
} 
+1

メインの内部の関数呼び出しの前の 'void'を削除します。 – Muggen

+2

コンパイラのエラーについて質問するときは、正確なエラーを質問に貼り付けることをお勧めします。 –

答えて

3

関数を呼び出すときは、(戻り値の型別名)voidを置くべきではありません。 void yrClac(totaldays, year, month, day);でそれを削除しても問題ありません。

+0

すべての素早い回答に感謝します! 申し訳ありませんが、私はちょっとした騒ぎです。 –

1

コードに明らかな問題があります。インサイド

main()あなたはこの宣言

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

別の潜在的な問題は、これが最も可能性が高い(合計が365より大きい場合)ので、切り捨ての0になりますあなたの365/total あるvoid

を削除するに持っています totalにはdoubleを使用するか、キャストしてください。

3

void yrClac(totaldays, year, month, day);をパラメータとしてタイプtotaldaysyearmonthdayのオブジェクトを取る関数を宣言します。 (これらの型は宣言されておらず、 "不完全な型"について不平を言うコンパイルエラーメッセージについて説明しています)。

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

1
int year=2000, month=1, day=1; 

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

cout << year << month << day; 

「無効」が正しく機能します。呼び出しメソッドは、どの型を返すべきかを指示する必要はありません。

関連する問題