2
我有一個類Packet
與抽象方法getID
:即使子類定義了抽象函數,爲什麼會出現抽象錯誤?
Type
Packet = class
...
function getID() : Integer;virtual;abstract;
class procedure writePacket(par0 : Packet; par1 : TIdTCPConnection);
...
implementation
class procedure Packet.writePacket(par0 : Packet; par1 : TIdTCPConnection);
// par1 is a TCP connection used to send data through the network;
begin
par1.writeInteger(par0.getID());
//some code following
end;
我有以下子類:
type
PacketTest = class(Packet)
...
function getID() : Integer;
...
function PacketTest.getID():Integer;
begin
result := {some value individual for each subclass}
end;
現在我調用父類的類程序writePacket
與包的子類爲par0
,其中然後應該調用子類的功能getID
。 相反,它調用超類的函數getID
和(當然)拋出一個抽象的錯誤。
我希望它動態調用子類的功能getID
,它永遠不應引起問題,因爲par0
是一直以來Packet
的Packet
一個子類本身是抽象的。
非常感謝你的好先生。工作過,非常有幫助! – user1652403
@User,在出現此錯誤之前,您必須忽略多個警告。首先,編譯器警告你,子類函數隱藏了基類的虛方法。其次,編譯器警告你,你正在創建一個具有抽象方法的類的實例。切勿禁用或忽略編譯器警告。 –
@ user1652403然後接受答案,不只是「up」,而是按綠色的選中標記 –