我使用过旧版本的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;
似乎多映射被向量取代了。有人可以给出建议吗?
从int
到FieldBase
的地图已被vector<FieldBase>
取代,从某种意义上说,它也是从int
(索引)到FieldBase
的地图。
只需更换
itr->second.getLength();
跟
itr->getLength();
根据上下文,您可以将循环替换为更简单的基于范围的 for 循环,该循环不提及迭代器:
for (const FieldBase &fb : fieldMap) {
fb.getLength();
}