Ошибка: нет совпадения для оператора <<

0

Я тренируюсь с C++ и классами. Мой проект состоит из двух файлов:

  • main.cpp
  • Date.h

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++:

Изображение 174551

  • 0
    Вы должны действительно научиться делать отступы в коде правильно!
  • 0
    Как я уже писал, я копирую код с помощью планшета, это не так просто. Ты когда-нибудь пробовал?
Показать ещё 4 комментария
Теги:
struct

2 ответа

4
Лучший ответ

Класс ostream не имеет operator<< перегруженного для вашей struct dmy. Поэтому он не знает, как напечатать это значение. То, что вам нужно без перегрузки оператора, выглядит примерно так:

Date::dmy date = date1.getS();
cout<<"First date: "<< date.year << "." << date.month << "." << date.day;
  • 0
    Спасибо!!! Это решило мою проблему.
1

date1.getS() фактически возвращает struct Date::dmy. Чтобы скомпилировать ваш код, вы должны перегрузить operator<< для Date::dmy

Ещё вопросы

Сообщество Overcoder
Наверх
Меню