Я создаю компонент, обобщая шаблон. Для создания необходимо использовать строковый идентификатор.Определить замену переменной постоянной переменной
Я замена:
#define MYCOMPONENT_CONSTANT_IDENTIFIER "ID value"
с
namespace myComponent
{
static const QString constant_identifier = "ID value"
}
следовать некоторым стандартам codding (Мишра, ...).
Это должно работать в отношении C++. И я проверил его на Constants-only header file C++.
Эта константа определена в заголовке компонента «myComponent» и включена в заголовок, в котором мой Индексатор инициализирован и компонент создан. Это не было изменено во время замены.
Замена строит успешно, но не срабатывает при попытке запустить. hapends неисправностей Сегментация по адресу:
template<>
inline void TMyIndexer::Init()
{
Map(...)
//before
//Map(ENUM_VAL, QSharedPointer<ITableFieldDefs>(new myComponent::TTableFieldDefs(MYCOMPONENT_CONSTANT_IDENTIFIER)));
Map(ENUM_VAL, QSharedPointer<ITableFieldDefs>(new myComponent::TTableFieldDefs(myComponent::constant_identifier)));
Map(...)
}
Где:
// TStaticFieldDefs<> implements ITableFieldDefs
typedef TStaticFieldDefs<myComponent::Fields> TTableFieldDefs;
//constructor
TStaticFieldDefs(QString id) : fId(id) {}
Если я иду вверх по стеку:
2.) qstring.h: встроенный QString :: QString (константный QString & другой): d (др.d) {Q_ASSERT (& прочее! = это); D-> ref.ref(); }
1.) qatomic_x86_64.h: инлайн BOOL QBasicAtomicInt :: исх()
Я предполагаю, что есть что-то неправильное в шаблоне обобщения, определения встроенного в конструкторе или что-то еще я не в курсе.
Любые объяснения приветствуются.
У меня нет идей и я прошу помощи.
Вы пробовали полную перестройку? Может быть, также удалив любую временную папку/файл вручную, а затем перестроить? Это фиксировало 90% ошибок сегментации, которые у меня были до сих пор –
Да, я это сделал. Полная очистка и rebuild.I обновил описание. – urkon
Я попытаюсь проверить это на более тривиальный случай. Tim thanx для ответа. – urkon