Ошибка при попытке сделать объект

Я пытаюсь сделать Question объект. Question будучи классом, но я получаю сообщение об ошибке:

Ошибка 1 ошибка C2440: «инициализация»: невозможно преобразовать из Questions * в Questions

Я пытаюсь сделать объект, чтобы я мог положить его в multimap типа <int, Questions>

Вот мой код:

#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 = new Questions("Whats the oldest known city in the world?", "Sparta", "Tripoli", "Rome", "Demascus");
string q2 = ("What sport in the olympics are beards dissallowed?", "Judo", "Table Tennis", "Volleyball", "Boxing");
string q3 = ("What does an entomologist study?", "People", "Rocks", "Plants", "Insects");
string q4 = ("Where would a cowboy wear his chaps?", "Hat", "Feet", "Arms", "Legs");
string 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");

map.insert(pair <int, Questions>(1, q1));
map.insert(pair <int, string>(2, q2));
// map.insert(pair<int,string>(3, q3));
for (multimap <int, string, std::less <int> >::const_iterator iter = map.begin(); iter != map.end(); ++iter)
cout << iter->first << '\t' << iter->second << '\n';
}

1

Решение

Questions q1 = new Questions неверный синтаксис.

От map.insert(pair <int, Questions>(1, q1)); Я вижу твои map тип значения — объект вопросов вместо указателя вопросов, поэтому он должен быть

Questions q1 = Questions ("Whats the oldest known city in the world?", "Sparta" , "Tripoli" , "Rome", "Demascus");

Также ваша переменная map имеет то же имя, что и std :: map, который является контейнером STL, предложите вам использовать другое имя, например: question_map;

редактировать

Позволять << iter->second вам нужно перегрузить operator<< для вопросов типа.

std::ostream& operator<<(const std::ostream& out, const Questions& q)
{
out << q.question;  // I made up this member as I can't see your Questions code
return out;
}
1

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

new выражение дает вам указатель на объект, который вы динамически распределяете. Вам нужно сделать Questions* q1 = new Questions(...);, Но если вам не нужно динамически размещать (вы в конечном итоге копируете объект на карту), не беспокойтесь. Просто делать Questions q1(...);,

Предположительно вы измените следующие строки (q2, q3и т. д.), но они не делают того, что вы ожидаете. (..., ..., ...) будет считаться самым правым элементом в этом списке через запятую. Так что ваши q2 линия эквивалентна string q2 = "Boxing";,

1

Первая строка вашего questionScore Метод является проблемой:

Questions q1 = new Questions ...

new x возвращает указатель на x объект, следовательно q1 должен быть определен как указатель.

Questions * q1 = new Questions ...
0
По вопросам рекламы [email protected]