【发布时间】:2015-09-24 18:32:49
【问题描述】:
我正在开发一个使用流在客户端之间发送数据的项目。它实现了一堆流操作符来支持这一点。它在C++ Builder 2010 中运行良好,但现在我将项目移至C++ Builder 10 Seattle,我收到了一个奇怪的错误。
在一个函数中创建TStream 并将数据写入其中
*pStream >>
Version >>
m_iPortNumber >>
m_iHeartBeatTimeout >>
m_iMaxToRead >>
m_pIPAddressFilter >>
m_iRetries;
m_pIPAddressFilter 这里是TStringList,错误与此有关。上面写着
[bcc32 错误] E2015 '>>(System::Classes::TStream 之间的歧义 &,bool &) 在 Common\Streams.h:28' 和 '>>(System::Classes::TStream &,System::Classes::TStrings *) 在 Common\Streams.h:42'
它所指的实现的流操作符看起来像这样
PACKAGE TStream & operator <<(TStream &Stream, bool b)
{
Stream.WriteBuffer(&b, sizeof(b));
return Stream;
}
PACKAGE TStream & operator >>(TStream &Stream, bool &b)
{
Stream.ReadBuffer(&b, sizeof(b));
return Stream;
}
PACKAGE TStream & operator <<(TStream &Stream, TStrings *pList)
{
int Count;
int i;
Stream << (Count=pList->Count);
for (i=0; i<Count; i++)
Stream << static_cast<WideString> (pList->Strings[i]);
return Stream;
}
PACKAGE TStream & operator >>(TStream &Stream, TStrings *pList)
{
AnsiString s;
int Count;
pList->Clear();
Stream >> Count;
while (Count--)
{
Stream >> s;
pList->Add(s);
}
return Stream;
}
编译器怎么会被这个弄糊涂,觉得是用bool的版本还是用TStrings的版本呢? TStrings 甚至是 TStringList 的父类,这是写入流的内容。如前所述,这在C++ Builder 2010 中运行良好。
【问题讨论】:
标签: c++ c++builder tstringlist tstream c++builder-10-seattle