C++; 我正在教自己如何在C++中编程,并解决这个问题: 编写一个C++程序,该程序具有日期类和朱利安类。Julian类应将日期表示为长整数。对于此程序,在Date类中包含一个转换运算符函数,该函数使用提供的算法将Date对象转换为Julian对象。通过转换2011年1月31日和2012年3月16日(对应于朱利安日期734533和734943)来测试您的程序
所以我们必须有一个C++; 我正在教自己如何在C++中编程,并解决这个问题: 编写一个C++程序,该程序具有日期类和朱利安类。Julian类应将日期表示为长整数。对于此程序,在Date类中包含一个转换运算符函数,该函数使用提供的算法将Date对象转换为Julian对象。通过转换2011年1月31日和2012年3月16日(对应于朱利安日期734533和734943)来测试您的程序,c++,class,built-in,C++,Class,Built In,所以我们必须有一个Date方法,它将一个参数转换成Julian类。我知道这必须通过关键字操作符来完成。我编写了一些代码,并收到以下错误消息: ttt.cpp:34:7: error: incomplete result type 'Julian' in function definition Date::operator Julian() ^ ttt.cpp:11:7: note: forward declaration of 'Julian' class Julian; //
Date
方法,它将一个参数转换成Julian
类。我知道这必须通过关键字操作符来完成。我编写了一些代码,并收到以下错误消息:
ttt.cpp:34:7: error: incomplete result type 'Julian' in function definition
Date::operator Julian()
^
ttt.cpp:11:7: note: forward declaration of 'Julian'
class Julian; // Forward declaration
^
ttt.cpp:50:12: error: 'Julian' is an incomplete type
return Julian(long(365*year + 31*(month-1) + day + T - MP));
^
ttt.cpp:11:7: note: forward declaration of 'Julian'
class Julian; // Forward declaration
^
2 errors generated.
我不清楚此错误消息的含义。我包含了一个转发声明,因为Julian
是在Date
之后定义的。我的代码如下。我将感谢任何帮助。多谢各位
#include <iostream>
#include <iomanip>
using namespace std;
/*
* Class to class conversion
*/
// CLASS DECLARATIONS=========================================================
class Julian; // Forward declaration
// "Date" Class Declaration------------------------------------------
class Date
{
private:
int month;
int day;
int year;
public:
Date(int=7, int=4, int=2012); // Constructor
operator Julian(); // Method to convert "Date" class to "Julian"
void showDate(); // print "Date"
};
// "Date" CLASS IMPLEMENTATION----------------------------
Date::Date(int mm, int dd, int yyyy)
{ // Constructor Method
month = mm;
day = dd;
year = yyyy;
}
Date::operator Julian()
{ // Method to convert "Date" class to "Julian"
int MP, YP, T;
if( month <=2 )
{
MP = 0;
YP = year - 1;
}
else
{
MP = int(0.4*month + 2.3);
YP = year;
}
T = int(YP/4) - int(YP/100) + int(YP/400);
return Julian(long(365*year + 31*(month-1) + day + T - MP));
}
void Date::showDate()
{
cout << setfill('0')
<< setw(2) << month << '/'
<< setw(2) << day << '/'
<< setw(2) << year % 100;
}
// "Julian" CLASS DECLARATION--------------------------------------------------------
class Julian
{
private:
int days;
public:
Julian(long=0); // Constructor
void show(); // Print julian date
};
// "Julian" Class Implementation----------------------------------------------------
Julian::Julian(long d)
{
days = d;
}
void Julian::show()
{
cout << days << endl;
}
int main()
{
Date a(1,31,2011);
Date b(3,16,2012);
Julian c, d;
c = Julian(a);
d = Julian(b);
a.showDate();
c.show();
cout << endl;
b.showDate();
d.show();
cout << endl;
return 0;
}
#包括
#包括
使用名称空间std;
/*
*类到类转换
*/
//类声明=========================================================
朱利安班;//远期申报
//“日期”类别声明------------------------------------------
上课日期
{
私人:
整月;
国际日;
国际年;
公众:
日期(int=7,int=4,int=2012);//构造函数
运算符Julian();//将“Date”类转换为“Julian”的方法
void showDate();//打印“日期”
};
//“日期”类的实现----------------------------
日期:日期(整数毫米,整数日,整数年)
{//构造函数方法
月=毫米;
日=日;
年份=yyy;
}
日期:操作员朱利安()
{//将“Date”类转换为“Julian”的方法
int-MP,YP,T;
如果(月您需要在日期类之前定义朱利安类。由于日期类需要完整定义朱利安类,因此仅向前声明在此处不起作用。您需要在日期类之前定义朱利安类。仅向前声明在此处不起作用因为Date
类需要Julian
类的完整定义。Date::operator Julian()
需要Julian
类定义(您在代码中称之为类声明)。因此,您需要在正确的位置包含Julian.h
。Date::operator Julian()
需要Julian
类定义(你在代码中称之为类声明。因此你需要将Julian.h
包含在正确的位置,这样才能实现。非常感谢!那么什么时候可以只使用forward声明呢?当你只需要声明类的指针/引用时,比如Julian*
@user1527227:请仔细解释forward declar非常感谢!那么什么时候可以只使用转发声明呢?当你只需要声明一个指向类的指针/引用时,比如Julian*
@user1527227:请仔细解释转发声明。