Как и во многих контейнерах Qt, тип элемента QVector
должен быть присваиваемым типом данных в вашей версии.
В отличие от стандартной библиотеки, Qt определяет это как :
Значения, хранящиеся в различных контейнерах, могут иметь любой назначаемый тип данных. Для квалификации тип должен предоставить конструктор по умолчанию, конструктор копирования и оператор присваивания.
Это действительно прискорбно, потому что нет практической необходимости в конструкторе по умолчанию в вашем примере , и действительно std::vector
позволит (совместимо) позволить вам использовать тип элемента, у которого его нет.
Функция QVector::value(int)
использует это свойство, но вы его не используете! Разработчики Qt должны делать какие-то проверки заранее, вместо того, чтобы использовать стандартный подход библиотеки «просто проверять предварительные условия, когда они действительно необходимы», иначе это «случайность» кода!
Как следствие, с до 5.13, в котором это было изменено , , вам нужно будет предоставить A
конструктор по умолчанию , извините.
Не забудьте и конструктор копирования & hellip; и правильная квалификация в этом A::function()
определении.
Предварительная декларация не решит эту проблему, и при этом она вам не понадобится. Фактически, добавление одного к этой конкретной программе ничего не изменит. ;)