0

嘿,我试图打印出我的多图值,但我得到了一个错误

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

问题.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';
}
4

4 回答 4

2

将 operator<< 添加为 Qeustions 的朋友,以便它可以访问 Question 类的私有成员。

在 Questions.h 中,将 operator<< 声明为非成员函数

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 中,定义 operator<< 函数

std::ostream& operator<<(std::ostream& stream, Questions const& q)
{
    stream << q.question << " " << q.correctAnswer;  
    return stream;
}
于 2012-12-19T00:47:27.280 回答
0

您尚未定义用于流式传输类型对象的函数Question

您需要定义函数:

std::ostream& operator<<(std::ostream& stream, Question const& question);
于 2012-12-19T00:40:22.250 回答
0

看起来您必须为您的 Questions 类重载 << 运算符:

宣言:

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

定义:

ostream &operator<<(ostream &out, const Question& q)
{
    out << q.question;
    return out;
}
于 2012-12-19T00:41:05.677 回答
0

错误消息非常直接地告诉您问题:您正在尝试将类型的对象插入Questions流中,但是您的:

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

仅作为评论出现。你需要写一些代码。此外,它不能是 Questions 类的成员。通常它是一个全局重载,是类的朋友,所以在类定义中你可以把它改成这样:

friend ostream &operator<<(ostream &out, const questions &q) { 
    return out << d.question; // probably other fields here
}
于 2012-12-19T00:41:39.750 回答