Delphi中过程重载错误

3
出现了这个错误原因不明,'[DCC Error] MyFile.pas(52): E2137 Method 'Assign' not found in base class'. 这里是我的Assign程序的一部分,在我加入最后一个Assign之前都是正常工作的。
procedure Assign(MyClass: TMyClass); overload; override;
procedure Assign(MyClass: ThisService.MyClass); overload; override;
procedure Assign(MyClass: ThatService.MyClass); overload; override;
procedure Assign(MyClass: TXMLMyClass); overload; override;
procedure Assign(MyClass: pbStruct1Messages.TMyRecord); overload; override;
procedure Assign(MyClass: pbStruct2Messages.TMyRecord); overload; override;
2个回答

5
使用override时,您表示正在覆盖从父类继承的具有相同签名的虚拟方法。如果父类没有具有该签名的虚拟方法,则编译器将正确地抱怨找不到该方法。请检查祖先类以确认方法是否真的存在。如果不存在,则不要使用override标记后代类中的方法。

Rob,感谢你让我深入了解。我发现父类没有覆盖我的'pbStruct2Messages.TMyRecord'分配函数。 - Razir66
1
我需要补充一点,如果父类有相应的虚方法但在“private”部分中,子类将无法找到它。它必须在“protected”中。 - Dany

-3
procedure Assign(MyClass: pbStruct1Messages.TMyClass); overload; override;
procedure Assign(MyClass: pbStruct2Messages.TMyClass); overload; override;

我认为这是错误的,你在参数TMyClass中使用了两个等号。使用类似于某种语法来替换。
procedure Assign(MyClass: pbStruct1Messages); overload; override;
procedure Assign(MyClass: pbStruct2Messages); overload; override;

1
pbStruct1Messages是一个命名空间或.pas文件,而不是一种类型。你不能这样做。 - serge
是的,这是我的错。但我认为TMyClass - 这是一个错误。 - ar_gentum
1
不,这两个单元中的TMyClass被视为不同的类。这就是为什么有命名空间的原因。 - Jerry Dodge
我的错,当将名称设置为通用名称时,最后2个变量并不是TMyClass,而实际上是记录,因此我已相应地进行了重命名。我能理解这可能会造成问题,我道歉了。 - Razir66

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接