【发布时间】:2012-12-05 22:02:29
【问题描述】:
我正在从 VCL TStream 类派生一个新类:
// A stream based on a temporary file, deleted when the stream is closed
class TTempFileStream : public TStream
{
...
public:
using TStream::Seek;
__int64 __fastcall Seek(const __int64 Offset, TSeekOrigin Origin)
{
return 0; // for simplicity!
}
...
} ;
TStream 声明了以下两个 Seek 变体:-
virtual int __fastcall Seek(int Offset, System::Word Origin)/* overload */;
virtual __int64 __fastcall Seek(const __int64 Offset, TSeekOrigin Origin)/* overload */;
但我在编译我的类时收到以下 W8022 警告:-
[BCC32 Warning]_utils.h(166): W8022
'_fastcall TTempFileStream::Seek(const __int64,TSeekOrigin)' hides virtual function '_fastcall TStream::Seek(int,unsigned short)'
Using 声明肯定可以解决这个问题吗?
为了把这个问题拖回正轨,我知道两个版本的 TStream::seek 相互关联的方式,我只是想获得派生类公开的继承 Seek(int,int) 方法.为什么我的using 声明不这样做?
【问题讨论】:
-
抱歉 - 点击“发布”太快了!
-
问题在于函数声明的不同仅在于返回类型。您必须发布父类以便我们提供更多详细信息。
-
@ThomasMatthews:父类Seek定义在这里:docwiki.embarcadero.com/Libraries/XE3/en/…
标签: c++ c++builder c++builder-2010 using-declaration