你好,我想做一个一行声明,我正在为我的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;
}
为了使用
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
。