我正在开发一个使用流在客户端之间发送数据的项目。它实现了一堆流操作符来支持这一点。它运行良好,C++ Builder 2010
但现在我将项目移动到C++ Builder 10 Seattle
我得到一个奇怪的错误。
在一个函数TStream
中创建 a 并将数据写入其中
*pStream >>
Version >>
m_iPortNumber >>
m_iHeartBeatTimeout >>
m_iMaxToRead >>
m_pIPAddressFilter >>
m_iRetries;
m_pIPAddressFilter
这是一个TStringList
,错误与此有关。它读到
[bcc32 错误] E2015 在 Common\Streams.h:28 处的 '>>(System::Classes::TStream &,bool &) 和 '>>(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;
}
编译器怎么会被这个弄糊涂,觉得应该用取abool
还是取版本是模棱两可的TStrings
。甚至是正在写入流TStrings
的父类。TStringList
如前所述,这在C++ Builder 2010
.