LINUX.ORG.RU

Есть ли способ добавить в класс константный объект?

 ,


0

1

Необходимо сделать несколько заранее определенных массивов со строками, из которых рандомно выбирается их комбинация. Пробовал инициализировать в хидере static const QStringList:

static const QStringList zipcodes={"1","2","3"};

но получается известная ошибка Invalid in-class initialization of static data member of non-integral type QStringList.

Как правильнее это сделать?

★★★★

вынести из класса или инициализровать в .cpp

annulen ★★★★★ ()

Константные поля структур и классов в плюсах инициализируются в списках инициализации конструкторов.

anonymous ()

ясно, оказалось, надо как-то так:

//contactFactory.cpp
const QStringList ContactFactory::names = QStringList() << "Alice" << "Bob" << "Dan";

wingear ★★★★ ()
Ответ на: комментарий от wingear

Тебе точно обязательно требуется QStringList в данном случае? Может быть достаточно следующего:

const char* ContractFactory::names[] = {
    "Alice",
    "Bob",
    "Dan"
};

m0rph ★★★★★ ()
Ответ на: комментарий от wingear

Я и не говорил о теле класса, просто если эстетствовать, то константный QStringList - это пустой расход памяти, пусть и незначительный.

m0rph ★★★★★ ()
Ответ на: комментарий от m0rph

там потом они рандомно комбинируются, а размеры массивов м.б. разными. В случае сишного массива придется хранить размеры как еще одну константу для аналога

QString name = names[rand()%names.size()];

wingear ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.