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 ★★★★★
()
Ответ на: комментарий от m0rph

а это разве сработает в теле класса? Просто сейчас прохожу «Introduction to design patterns with Qt», а там на неё все завязано

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

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

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

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

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

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