Поэтому я должен тестировать эту программу для проверки ошибок, чтобы убедиться, что даты действительны. Все работало, когда я только использовал cout
, но мне нужно отправить вывод или сообщения об ошибках в файл.Проблемы с передачей потока в качестве параметра
Меня беспокоит только класс validDate
, класс dateType
отлично работает. Я пробовал передать ostream& myOutput
в качестве параметра для void validDate::setDate(int month, int day, int year)
, но мне пришлось бы изменить параметры для validDate
, которые не закончили работать для меня. Любые идеи были бы замечательными.
#include <fstream>
#include <iostream>
using namespace std;
class dateType {
public:
dateType(int month = 1, int day = 1, int year = 0);
void setDate(int month, int day, int year);
int getDay() const;
int getMonth() const;
int getYear() const;
void printDate(ostream& myOutput) const;
protected:
int dMonth;
int dDay;
int dYear;
};
class validDate:public dateType {
public:
validDate(int month = 1, int day = 1, int year = 0);
void setDate(int month, int day, int year, ostream& myOutput);
ostream& myOutput;
};
int main() {
ofstream myOutput("outfile");
if (myOutput.fail()) {
return -1;
}
validDate badDay;
myOutput << "\n\nvalidDate badDay;\n";
myOutput << "--------------------\n";
badDay.setDate(2, 29, 2015);
myOutput.close();
system("pause");
return 0;
}
dateType::dateType(int month, int day, int year)
{
dMonth = month;
dDay = day;
dYear = year;
}
void dateType::setDate(int month, int day, int year)
{
dMonth = month;
dDay = day;
dYear = year;
}
int dateType::getDay() const
{
return dDay;
}
int dateType::getMonth() const
{
return dMonth;
}
int dateType::getYear() const
{
return dYear;
}
void dateType::printDate(ostream& myOutput) const
{
myOutput << dMonth << "-" << dDay << "-" << dYear;
}
validDate::validDate(int month, int day, int year)
{//GETTING ERROR HERE, C2512 no appropriate default constructor available
streambuf myOutput;
setDate(month, day, year, myOutput);
}
void validDate::setDate(int month, int day, int year, ostream& myOutput) {
if (year < 0) {
myOutput << "Error: Year must be greater than 0." << endl;
}
else
switch (month)
{
case 4:
case 6:
case 9:
case 11:
if ((day < 0) || (day > 30)) {
myOutput << "Error: Month must have between 1-30 days." << endl;
}
break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
if ((day < 0) || (day > 31)) {
myOutput << "Error: Month must have between 1-31 days." << endl;
}
break;
case 2:
if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
myOutput << "Error: Month must have between 1-29 days since it
is a leapyear." << endl;
}
else {
myOutput << "Error: Month must have between 1-28 days." << endl;
}
break;
default:
myOutput << "Error: Invalid Month." << endl;
}
}
добро пожаловать в переполнение стека! добавьте свой язык (C++) в качестве тега. большинство людей будут искать только те метки, с которыми они знакомы, поэтому люди, которые знают C++, не могут найти ваш вопрос. также исправьте свой отступ, так как трудно прочитать свой код. –
'std :: ostream' не имеет конструктора по умолчанию [http://www.cplusplus.com/reference/ostream/ostream/ostream/). При построении требуется аргумент 'streambuf'. –
Передайте 'ofstream' в качестве эталонного параметра. Поскольку вы предоставили значения по умолчанию для других параметров в конструкторе, парам 'ofstream' придется идти первым. Нет разумного значения по умолчанию, которое вы могли бы использовать для него. Также наблюдайте, что вы переопределяете функцию 'setDate', но не объявляете ее виртуальной в' dateType'. –