c ++文字数组表示法

问题描述 投票:0回答:1

你好,我想做一个一行声明,我正在为我的Quiz项目使用QT创建器,我想通过文字数组表示法(JS)传递它,还有其他方法可以在一行声明中声明它。

我想这样构造它:

Card c = new Card("Question?", 2, (Answer[]){ 1, "answer 1", 2, "answer 2", 3, "answer 3"} );

这是我的课程:

class Answer{
private:
    qint8 id;
    QString answer;

public:
    Answer(QString nAnswer, qint8 nId);
    QString getAnswer();
    qint8 getId();

};

class Card
{
private:
    QString question;
    QVector<Answer> answers;
    qint8 solutionId;

public:
    Card(QString nQuestion, qint8 nSolutionId, Answer[] );
    QString getQuestion();
    QVector<Answer> getAnswers();
    // void setSolutionId(qint8 nSolutionId);

};

Answer::Answer(QString nAnswer, qint8 nId)
{
    answer = nAnswer;
    id = nId;
}


Card::Card(QString nQuestion, qint8 nSolutionId, Answer nAnswers[])
{
    question = nQuestion;
    solutionId = nSolutionId;
}
c++ qt
1个回答
0
投票

为了使用

Card c = Card("Question?", 2, { {"answer 1", 1}, {"answer 2", 2}, {"answer 3", 3} } );

您需要更改您的

Card(QString nQuestion, qint8 nSolutionId, Answer[] );

构造函数采用QVector<Answer>代替Answer[]。看起来像

Card(QString nQuestion, qint8 nSolutionId, QVector<Answer> nAnswers );

//...

Card(QString nQuestion, qint8 nSolutionId, QVector<Answer> nAnswers ) :
    question(nQuestion),
    answers(nAnswers),
    solutionId(nSolutionId)     
{}

之所以可行,是因为QVector<T>的构造函数需要一个std::initializer_list<T>,所以>

{ {"answer 1", 1}, {"answer 2", 2}, {"answer 3", 3} }

将被转换为用于初始化std::initializer_list<Answer>answers

© www.soinside.com 2019 - 2024. All rights reserved.