我已經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的回答可能會讓你直觀。 –