Ошибка C2059: «постоянная» при попытке создать контейнер Qt в заголовочном файле с известным размером

Я использую Qt 4.8.5 с компилятором и отладчиком MSVC 2010 из Windows 7.0 SDK и создателем Qt в качестве своей IDE.

Следующий синтаксис работает нормально:

class Device
{
 public:
    Device();
    ....
    QVector<double> MyContainer;
    ....
 protected:
    ....
}

, где QContainer может быть QVector, QList... и т. д., а T может быть любого типа.

Но следующий синтаксис запрещен создателем Qt и показывает «Ошибка C2059» при попытке компиляции:

class Device
{
 public:
    Device();
    ....
    QVector<double> MyContainer(100);
    ....
 protected:
    ....
}

Я так запутался, поскольку в документе говорится, что синтаксис «QContainer = MyContainer (szie)» является законным, но мой создатель Qt просто не может читать, и он говорит мне, что есть «неожиданный токен» (').

Я делаю изнашивание?


person Tay2510    schedule 16.01.2014    source источник
comment
Что такое MyContainer? И вы на самом деле пишете, например. QVector<SomeType> = MyContainer;? Не могли бы вы показать больше контекста (например, окружающий код)? А точнее, покажите нам настоящий код.   -  person Some programmer dude    schedule 16.01.2014
comment
Извините, я добавил больше информации об этом.   -  person Tay2510    schedule 16.01.2014


Ответы (1)


Это потому, что вы пытаетесь присвоить тип. QVector<double> — это тип, а не объявление переменной или что-то еще, чему вы можете присвоить значение. Это означает, что оба примера на самом деле неверны.

Я думаю, вы хотите объявить переменную-член MyContainer, для которой вы должны использовать

QVector<double> MyContainer;

Чтобы инициализировать контейнер до определенного размера, вы должны использовать список инициализаторов конструктора:

Device()
    : MyContainer(100)
{
    ...
}

Для получения дополнительной информации о списках инициализаторов см., например, этот учебник или эту ссылку.

person Some programmer dude    schedule 16.01.2014
comment
Я извиняюсь, что = это просто опечатка в моем сообщении, и я ее исправил. Кроме того, большое спасибо, ссылки дают мне много подсказок и проясняют мою проблему. Теперь я знаю, как исправить эту ошибку, спасибо! - person Tay2510; 17.01.2014