1

オブジェを作ろうとしていQuestionます。Questionクラスですが、次のエラーが表示されます。

エラー 1 エラー C2440: '初期化中': からQuestions *に変換できませんQuestions

オブジェクトを作成しようとしているので、それをmultimapof 型に入れることができます<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';
}
4

3 に答える 3

1

このnew式は、動的に割り当てたオブジェクトへのポインターを提供します。あなたがする必要がありますQuestions* q1 = new Questions(...);。ただし、動的に割り当てる必要がない場合 (オブジェクトをマップにコピーすることになります)、気にしないでください。するだけですQuestions q1(...);

おそらく、次の行 ( 、 など) を一致するように変更しますq2q3、そのままでは期待どおりに動作しません。は(..., ..., ...)、このコンマ区切りリストの右端の項目として評価されます。したがって、あなたのq2行は と同等string q2 = "Boxing";です。

于 2012-12-18T23:51:06.670 に答える
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");

また、変数マップは、STL コンテナーである std::map と同じ名前を持っています。たとえば、別の名前を使用することをお勧めします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;
}
于 2012-12-18T23:52:02.183 に答える
0

メソッドの最初の行がquestionScore問題です:

Questions q1 = new Questions ...

new xxオブジェクトへのポインターを返すため、ポインターq1として定義する必要があります。

Questions * q1 = new Questions ...
于 2012-12-18T23:51:50.233 に答える