我指的是这里:
QuickFix Login Failed due to password missing
和这里 :
How to make the login part in QuickFIX
在toAdmin中添加用户名和密码,如下所示:
void Application::toAdmin( FIX::Message& message, const FIX::SessionID& sessionID)
{
if (FIX::MsgType_Logon == message.getHeader().getField(FIX::FIELD::MsgType))
{
FIX44::Logon& logon_message = dynamic_cast<FIX44::Logon&>(message);
FIX::Username username = std::string("my_username") ;
logon_message.setField( username );
}
}
这会导致gcc 4.8.2中的编译器错误:
错误:无法dynamic_cast消息? (类型为FIX::Message类)以类型为FIX44::Logon& (目标不是指针或对完整类型的引用)
然后我将代码更改为
FIX44::Logon* logon_message = (FIX44::Logon*)(&message);
FIX::Username username = std::string("my_username") ;
logon_message->setField( username );
这次,编译器再次出错:
error: invalid use of incomplete type ??class FIX44::Logon??
logon_message->setField( username );
^
我应该修改什么以便可以正确设置用户名和密码
功能toAdmin? logon_message-> setField(username)怎么了? ?
编辑:
根据此网页:
https://sourceforge.net/p/quickfix/mailman/message/26233433/
以下对我有用:
if (FIX::MsgType_Logon == message.getHeader().getField(FIX::FIELD::MsgType))
{
message.getHeader().setField(553, "XXXXXXXXX");
message.getHeader().setField(554, "yyyyyyyyy");
}
最佳答案
你有没有尝试过
FIX44::Logon* logon_message = dynamic_cast<FIX44::Logon*>(message);
要么
FIX44::Logon* logon_message = dynamic_cast<FIX44::Logon*>( *(message) );
要么
FIX44::Logon* logon_message = dynamic_cast<FIX44::Logon*>(&message);
我认为这可能是正确取消引用消息的问题。