无法在 C++20 中编译新的快速修复版本



我使用过旧版本的QuickFix。现在,我已经将代码更新为C++20并安装了最新版本的QuickFix。我已经从 https://github.com/quickfix/quickfix 下载了代码。 现在我收到编译器错误: 修复::字段库"没有成员"第一" 修复::字段库"没有成员"第二">

这是适用于旧版本的快速修复的代码,但不适用于实际版本:

const FIX::FieldMap& fieldMap
...
for (auto itr = fieldMap.begin(), end = fieldMap.end(); itr != end; ++itr)
{
if (itr->second.getLength())
{
...
}
}   
...

问题是 FieldMap.h 中的以下行:

typedef std::vector < FieldBase, ALLOCATOR< FieldBase > > Fields;

这是旧版本之外的a:

typedef std::multimap < int, FieldBase, message_order, ALLOCATOR<std::pair<const int,FieldBase> > > Fields;

似乎多映射被向量取代了。有人可以给出建议吗?

intFieldBase的地图已被vector<FieldBase>取代,从某种意义上说,它也是从int(索引)到FieldBase的地图。

只需更换

itr->second.getLength();

itr->getLength();

根据上下文,您可以将循环替换为更简单的基于范围的 for 循环,该循环不提及迭代器:

for (const FieldBase &fb : fieldMap) {
fb.getLength();
}

最新更新