我正在创建一个组件,一个模板的泛化。对于创建必须使用字符串标识符。
我正在更换:
#define MYCOMPONENT_CONSTANT_IDENTIFIER "ID value"
和
namespace myComponent
{
static const QString constant_identifier = "ID value"
}
遵循一些编码标准(MISRA,...)。
这应该适用于 C++。我在Constants-only 头文件 C++中检查了它。
此常量在组件“myComponent”的标题中定义,并包含在初始化我的索引器和创建组件的标题中。这在更换时没有改变。
替换构建成功,但尝试运行失败。分段错误发生在:
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(const QString &other) : d(other.d) { Q_ASSERT(&other != this); d->ref.ref(); }
1.) qatomic_x86_64.h: 内联 bool QBasicAtomicInt::ref()
我想模板泛化、构造函数中的内联定义或其他我不知道的东西有问题。
欢迎任何解释。
我没有想法,请寻求帮助。