Преобразование типов данных из класса в класс в переполнении стека

Я учу себя программировать на 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;
}

1

Решение

Вам нужно определить Julian класс перед Date учебный класс. Просто предварительная декларация не будет работать здесь, потому что Date класс нуждается в полном определении Julian учебный класс.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]