0
void Exam:: read_questions(string filename) const{
    ifstream file;
    file.open(filename);
    if (file.is_open()){
        string line;
        while(getline(file,line)){
            Question* currentQuestion =  parse_question(line);
            question_list.push_back(currentQuestion);
        }
    }else{
        cout << "invalid file" << endl;
    }
    file.close();
}

question_list.push_back(currentQuestion);に問題があると、エラーが発生します

オーバーロードされた関数のインスタンスがありません

とまた言います

push_back' : 2 つのオーバーロードには、[ _Ty=Question * ] を持つ 'this' ポインター 1 の正当な変換がありません

このエラーの意味と修正方法を教えてください。

以下は、Exam のヘッダー ファイルです。

class Exam 
{
public:
    Exam();
    Exam(int num_q, int min_chap, int max_chap);
    void read_questions(string filename) const;
    ~Exam();
    void write_exam(string filename) const;
    void write_key(string filename) const;
    void shuffle();

private:
    vector<Question *> question_list;
    int minC;
    int maxC;
    int numQ;
};
4

1 に答える 1

0

問題は、次のように宣言することですread_question

void Exam:: read_questions(string filename) const

here は、const関数が呼び出したオブジェクトを変更しないことを示しています。次に、関数で次のようにします。

question_list.push_back(currentQuestion);

question_listメンバー変数なので、約束を破りました。コンパイラがあなたを呼び出しています。

于 2013-03-30T02:36:32.327 に答える