我已经referd到这里: QuickFix Login Failed due to password missing的quickfix toAdmin添加用户名,密码错误
这里: 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编译错误:
错误:can not dynamic_cast ?? me ssage? (类型为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");
}
你绝对是在正确的轨道上,只是一些C++指针的东西绊倒你。下面的Waheed Brown的回答可能会让你直观。 –