Я тренируюсь с C++ и классами. Мой проект состоит из двух файлов:
main.cpp
using namespace std;
#include <iostream>
#include<Windows.h>
#include "Date.h"
main(){
Date date1;
Date date2;
cout<<"Type first date: ";
date1.setAll();
cout<<"type second date: ";
date2.setAll();
cout<<First date: "<<date1.getS();
cout<<Second date: "<<date2.getS();
}
Date.h
class Date{
public:
Date(){}
~Date(){system("pause");}
void setAll();
struct dmy{
int day, month, year;
};
dmy c;
dmy getS();
private:
void setDay();
void setMonth();
void setYear();
};
void Date::setAll(){
setDay();
setMonth();
setYear();
}
//all set ...
Date::dmy Date::getS(){
return c;
}
Я получаю ошибки в
cout<<"First date: "<<date1.getS();
Сообщение об ошибке начинается с
Error: no match for 'operator<<' in std::operator<<
Что означает эта ошибка, и как я могу ее исправить?
Из-за ограничений в Интернете на компьютерах наших школ я не могу напрямую скопировать сообщение об ошибке, вот экран сообщения об ошибке в Dev C++:
Класс ostream
не имеет operator<<
перегруженного для вашей struct dmy
. Поэтому он не знает, как напечатать это значение. То, что вам нужно без перегрузки оператора, выглядит примерно так:
Date::dmy date = date1.getS();
cout<<"First date: "<< date.year << "." << date.month << "." << date.day;
date1.getS()
фактически возвращает struct Date::dmy
. Чтобы скомпилировать ваш код, вы должны перегрузить operator<<
для Date::dmy