构造函数反抗?发生了什么?

时间:2016-08-20 21:06:38

标签: c++ constructor

我已经完成了一项任务,提出了一些要求,例如为两类问题制作抽象基类,这些问题将是子类,另一个要求是所有三个类都必须有两个构造函数而且只有析构函数可能是空的。

所以我在Question(baseclass)的.cpp中做了这个:

Question::Question(string question)
{
    this->question = question;
}

Question::Question()
{
    this->question = "N/A";
}

在其中一个名为" MultipleAnswerQuestion "的子类中我试着这样做:

MultipleAnswerQuestion::MultipleAnswerQuestion(string question, string alternatives[], 
int alternativeAmount, int correctAnswer):Question(question)
{
    for(int i=0; i<alternativeAmount; i++){ 
        this->alternatives[i] = alternatives[i]; //string
    }
    this->alternativeAmount = alternativeAmount; //int
    this->correctAnswer = correctAnswer; //int
}

MultipleAnswerQuestion::MultipleAnswerQuestion()
{
    for(int i=0; i<alternativeAmount; i++){ 
        this->alternatives[i] = ""; //string
    }
    this->alternativeAmount = NULL; //int
    this->correctAnswer = NULL; //int
}

有关MultipleAnswerQuestion底层构造函数的错误,说: &#34; 智能感知:课程&#34;问题&#34;有多个默认构造函数&#34;

出了什么问题?我该如何解决这个问题?

填写构造函数并且有两个是需求,所以我不能删除它。

修改 类声明:

class Question
{
    public:
        Question();
        Question(string question = "N/A");
        virtual ~Question();

        void setQuestion(const string &question);
        string getQuestion() const;

        void print() const;

        virtual void printSpec() const=0;

    private:
        string question;

};

和MultipleAnswerQuestion:

const int MAX = 6;
class MultipleAnswerQuestion :
    public Question
{
    public:
        MultipleAnswerQuestion();
        MultipleAnswerQuestion(string question, string alternatives[], int alternativeAmount, int correctAnswer);
        virtual ~MultipleAnswerQuestion();

        void printSpec() const;
        void setCorrectAnswer(int correctAnswer);
        void setAlternative(int alternativeNr, string alternative);

    private:
        int correctAnswer;
        string alternatives[MAX];
        int alternativeAmount;
};

1 个答案:

答案 0 :(得分:4)

你有两个构造函数,一个是默认值,另一个是字符串。但是,您已使用默认参数声明了字符串构造函数,因此如果您尝试构造一个没有任何参数的字符串构造函数,则可能会使用 two 。编译器抱怨,因为它不能同时使用两者,并且没有规则可以选择一个而不是另一个。

删除默认构造函数,或删除字符串参数的默认值。