0

我不明白这段代码有什么问题。它说“我的功能不允许使用不完整的类型”。

这就是我想要做的:

编写一个名为的函数yrClac(),它有一个整数参数,表示自世纪之交 (1.1.2000) 以来的总天数,以及名为年、月和日的引用参数。该函数用于计算传递给它的给定天数的当前年、月和日。使用引用,函数应该直接改变调用函数中各自的实际参数。对于这个问题,假设一年总是有 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, year, month,类型的对象day作为参数的函数。(这些类型都没有被声明,这解释了抱怨“不完整类型”的编译错误消息)。

您想调用yrCalc,而不是重载它,因此请使用yrClac(totaldays, year, month, day)(即删除void)。

于 2012-04-18T02:40:28.913 回答
2

您的代码存在明显问题。

在你里面main()你有这个声明

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

消除void

另一个潜在的问题是你的365/total 这很可能会0因为截断而导致(如果总数大于 365)你最好使用doublefortotal或 type cast。

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

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

cout << year << month << day;

删除“无效”将正常工作。调用方法不需要告诉它应该返回哪种类型。

于 2012-04-18T02:46:14.323 回答