Quickfix crack() 抛出 Field not found 字段 35 的异常

Quickfix crack() throws Field not found exception for field 35

我是 quickfix 的新手。

我创建了一个与服务器正常连接的客户端。在我的 fromApp() 函数上,我可以使用简单的 std::cout << message << std::endl; 打印消息。并且消息的所有字段都在那里,它们也存在于日志文件中。当我尝试调用 crack() 时,它抛出 Field not found 异常。查看日志文件,我看到异常被抛出,因为 quickfix 找不到字段 35。有人知道这件事吗?

编辑1:

void fromApp( const FIX::Message& message,
                           const FIX::SessionID& sessionID )
throw( FIX::FieldNotFound, FIX::IncorrectDataFormat, FIX::IncorrectTagValue, FIX::UnsupportedMessageType )
{
    std::cout << "FromApp" << std::endl;
    std::cout << message << std::endl;

    try
    {
        crack( message, sessionID );
    }
    catch(std::exception& ex)
    {
        std::cout << "crack exception: " << ex.what() << std::endl;
    }
}

void onMessage( const FIX44::MarketDataIncrementalRefresh& message, const FIX::SessionID& sessionID )
{

    std::cout << "OnMessage" << std::endl;
}

在我的终端上 windows 我得到以下输出:

FromApp
8=FIX.4.49=12335=W34=7249=servidor52=20150123-13:34:56.95756=cliente22=448=CERB001D55=CERB001D268=1269=0270=100271=1000290=110=239    
crack exception: Field not found

在 message.current.log 我得到:

20150123-13:29:03.618 : 8=FIX.4.49=7035=A34=149=cliente52=20150123-13:29:03.61856=servidor98=0108=2010=077
20150123-13:29:03.655 : 8=FIX.4.49=7035=A34=149=servidor52=20150123-13:29:03.65856=cliente98=0108=2010=081
20150123-13:29:06.629 : 8=FIX.4.49=12235=W34=249=servidor52=20150123-13:29:06.63556=cliente22=448=CERB001D55=CERB001D268=1269=0270=100271=1000290=110=175

编辑 2:

当我将 crack() 函数放在 try-catch 块之外时,在 message.event.log 我得到:

20150123-15:49:11.204 : Message 2 Rejected: Conditionally Required Field Missing:35
20150123-15:49:16.221 : Message 3 Rejected: Conditionally Required Field Missing:35

提前致谢。

终于找到问题的根源了

我已经从源代码安装了 quickfix,似乎在较新版本的 quickfix(1.14.0 和最新版本)中,DataDictionaryProvadider.h 中与共享指针相关的某些内容发生了变化,这似乎是问题。当我从 apt-get 安装 quickfix 时,我得到了 1.13.3 版本并且一切正常。

感谢所有试图提供帮助的人。