I have referd to here : QuickFix Login Failed due to password missing
and here : How to make the login part in QuickFIX
to add username and password in toAdmin like following :
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 );
}
}
This cause compiler error in gcc 4.8.2 :
error: cannot dynamic_cast ??message?? (of type ??class FIX::Message??) to type ??class FIX44::Logon&?? (target is not pointer or reference to complete type)
then I change my code to
FIX44::Logon* logon_message = (FIX44::Logon*)(&message);
FIX::Username username = std::string("my_username") ;
logon_message->setField( username );
this time , compiler error again :
error: invalid use of incomplete type ??class FIX44::Logon??
logon_message->setField( username );
^
What should I modify so that I can correctly set username and password in function toAdmin ? what is wrong with logon_message->setField( username ); ?
Edit :
according to this webpage : https://sourceforge.net/p/quickfix/mailman/message/26233433/
The following works fine to me :
if (FIX::MsgType_Logon == message.getHeader().getField(FIX::FIELD::MsgType))
{
message.getHeader().setField(553, "XXXXXXXXX");
message.getHeader().setField(554, "yyyyyyyyy");
}