Я учу себя программировать на C ++ и работаю над этой проблемой:
Напишите программу на C ++, которая имеет класс Date и класс Julian. Юлианский класс должен представлять дату в виде длинного целого числа. Для этой программы включите функцию оператора преобразования в класс Date, которая преобразует
Date
возражать противJulian
объект, используя предоставленный алгоритм. Проверьте вашу программу, конвертировав 31.01.2011 и 16.03.2012, которые соответствуют юлианским датам 734533 и 734943.
Таким образом, мы должны иметь Date
метод, который преобразует аргумент в Julian
учебный класс. Я понимаю, что это должно быть сделано через ключевое слово operator
, Я написал некоторый код и получаю следующее сообщение об ошибке:
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;
}
Вам нужно определить Julian
класс перед Date
учебный класс. Просто предварительная декларация не будет работать здесь, потому что Date
класс нуждается в полном определении Julian
учебный класс.
Других решений пока нет …