С ++ Буквенная запись массива - PullRequest
0 голосов
/ 29 октября 2019

Здравствуйте, я хочу сделать однострочное объявление, я использую QT Creator для своего проекта Quiz, я хочу передать его через буквенное обозначение массива (JS), есть ли другой способ объявить его в однострочном объявлении.

Я хотел бы построить это так:

Card c = new Card("Question?", 2, (Answer[]){ "answer 1", 1, "answer 2", 2, "answer 3", 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;
}

1 Ответ

0 голосов
/ 29 октября 2019

Чтобы использовать

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...