Не могу распечатать мультикарту из-за итератора

Эй, я пытаюсь распечатать мои мультикарты, но я получаю сообщение об ошибке

for ( multimap< int, Questions, less< int > >::iterator iterator = question_map.begin();
iterator != question_map.end(); ++iterator )
cout << iterator->first << '\t' << iterator->second << '\n';

Ошибка гласит:

Error   1   error C2679: binary '<<' : no operator found which takes a right-hand operand of type 'Questions' (or there is no acceptable conversion)    c:\users\conor\documents\college\dkit - year 2 - repeat\dkit - year 2 - semester 1 - repeat\games programming\millionaire\millionaire\questions.cpp 31  1   Millionaire

Вот остальная часть моего кода:

Questions.h
#ifndef QUESTIONS_H
#define QUESTIONS_H
#include <string>
#include <algorithm>
#include <map>
#include <iostream>
using namespace std;

class Questions
{
public:
Questions();
Questions(string question,string correctAnswer, string wrongAnswer1,string wrongAnswer2,string wrongAnswer3);
//void shuffle(string *array, int n);
//string getQuestion();
//string getCorrectAnswer();
//string getAnswers();
//bool checkAnswer(string answer);
void questionStore();
//void addQuestion(int level, Questions question);
//Questions printQuestion(int level);
//ostream& operator<<(const ostream& out, const Questions& q);private:
string question;
string correctAnswer;
string wrongAnswer1;
string wrongAnswer2;
string wrongAnswer3;
multimap<int,Questions> question_map;
};

#endif

Questions.cpp

#include <iostream>
#include "Questions.h"using namespace std;
Questions :: Questions()
{

}
Questions :: Questions(string question,string correctAnswer, string wrongAnswer1,string wrongAnswer2,string wrongAnswer3)
{
}void Questions :: questionStore()
{
Questions q1 = Questions("Whats the oldest known city in the world?", "Sparta" , "Tripoli" , "Rome", "Demascus");
Questions q2 = Questions("What sport in the olympics are beards dissallowed?", "Judo", "Table Tennis" , "Volleyball", "Boxing");
Questions q3 = Questions("What does an entomologist study?", "People" , "Rocks" , "Plants", "Insects");
//string q4 = ("Where would a cowboy wear his chaps?", "Hat" , "Feet" , "Arms", "Legs");
//tring q5 = ("which of these zodiac signs is represented as an animal that does not grow horns?", "Aries" , "Tauris" , "Capricorn", "Aquarius");
//string q6 = ("Former Prime Minister Tony Blair was born in which country?", "Northern Ireland" , "Wales" , "England", "Scotland");
//string q7 = ("Duffle coats are named after a town in which country?", "Austria" , "Holland" , "Germany", "Belgium");
//string q8 = ("The young of which creature is known as a squab?", "Horse" , "Squid" , "Octopus", "Pigeon");
//string q9 = ("The main character in the 2000 movie ""Gladiator"" fights what animal in the arena?", "Panther" , "Leopard" , "Lion", "Tiger");

question_map.insert(pair<int,Questions>(1,q1));
question_map.insert(pair<int,Questions>(1,q2));
question_map.insert(pair<int,Questions>(1,q3));

for ( multimap< int, Questions, less< int > >::iterator iterator = question_map.begin();
iterator != question_map.end(); ++iterator )
cout << iterator->first << '\t' << iterator->second << '\n';
}

0

Решение

Добавить оператора<< как друг Qeustions, он может получить доступ к закрытому члену класса Question.

В вопросах .h, объявить оператора<< как функция, не являющаяся членом

class Questions
{
public:
Questions();
Questions(string question,string correctAnswer, string wrongAnswer1,string wrongAnswer2,string wrongAnswer3);
void questionStore();
private:
string question;
string correctAnswer;
string wrongAnswer1;
string wrongAnswer2;
string wrongAnswer3;
multimap<int,Questions> question_map;

friend std::ostream& operator<<(std::ostream& stream, Questions const& q);
};

std::ostream& operator<<(std::ostream& stream, Questions const& q);

в Questions.cpp определите оператор<< функция

std::ostream& operator<<(std::ostream& stream, Questions const& q)
{
stream << q.question << " " << q.correctAnswer;
return stream;
}
2

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

Вы не определили функцию для потоковой передачи объекта типа Question,

Вам нужно определить функцию:

std::ostream& operator<<(std::ostream& stream, Question const& question);
0

Похоже, вы должны перегрузить << оператор для вашего класса вопросов:

Декларация:

friend ostream &operator<<(ostream &out, const Question& q);

Определение:

ostream &operator<<(ostream &out, const Question& q)
{
out << q.question;
return out;
}
0

Сообщение об ошибке говорит вам о проблеме довольно напрямую: вы пытаетесь вставить объект типа Questions в поток, но ваш

//ostream& operator<<(const ostream& out, const Questions& q);

присутствует только в качестве комментария. Вам нужно написать код. Кроме того, он не может быть членом класса Вопросы. Как правило, это будет глобальная перегрузка, которая является другом класса, поэтому внутри определения класса вы бы изменили его на что-то вроде:

friend ostream &operator<<(ostream &out, const questions &q) {
return out << d.question; // probably other fields here
}
0
По вопросам рекламы [email protected]