I modified the code a little so that the calling becomes more consistent. I removed reqMktData2. But I still end up getting the same error. It works when I keep either one of them, but not both. This is what I did.

Code:
[.cpp file]
m_pClient->reqMktData( m_dlgOrder->m_id, m_dlgOrder->getContract(),
		m_dlgOrder->m_genericTicks, m_dlgOrder->m_snapshotMktData);

m_pClient->reqMktData( m_dlgOrder->m_id2, m_dlgOrder->getContract2(),
		m_dlgOrder->m_genericTicks, m_dlgOrder->m_snapshotMktData);
[file end]

[.h file]
void EClientSocketBase::reqMktData(TickerId tickerId, const Contract& contract, 
								   const IBString& genericTicks, bool snapshot)
{
        std::ostringstream msg;
        
        (more code)

        bufferedSend( msg.str());
}

void EClientSocketBase::reqMktData(TickerId tickerId, const Contract2& contract2, 
								   const IBString& genericTicks, bool snapshot)
{
        std::ostringstream msg;
        
        (more code)

        bufferedSend( msg.str());
}
[file end]

[.h file]
virtual void reqMktData( TickerId id, const Contract &contract,
	   const IBString& genericTicks, bool snapshot) = 0;

virtual void reqMktData( TickerId id, const Contract2 &contract2,
	   const IBString& genericTicks, bool snapshot) = 0;
[file end]

[.h file]
void reqMktData(TickerId id, const Contract &contract,
		const IBString &genericTicks, bool snapshot);

void reqMktData(TickerId id, const Contract2 &contract2,
		const IBString &genericTicks, bool snapshot);
[file end]