Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • Home
  • SEARCH
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 649843
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 13, 20262026-05-13T21:59:18+00:00 2026-05-13T21:59:18+00:00

I have a binary tree class that is created with a root node and

  • 0

I have a binary tree class that is created with a root node and nodes can be added to it as needed in the code, however I am having trouble in deleting the nodes because I point to them with TNodePtr and it is an incompatible type with TNode.
At the moment I have this recursive method of deleting nodes which should work once the incompatible types is sorted. Thanks.

Destructor TTree.Destroy;
procedure FreeSubnodes(Node: TNodePtr);
begin
        if Assigned(Node.Left) then
                FreeSubnodes(Node.Left);
        if Assigned(Node.Right) then
                FreeSubnodes(Node.Right);
        Delete(Node);
end;
begin
        FreeSubnodes(Root);
        inherited;
end;

Edit 04/03/2010:
The error given is this:
[Warning] SystemBuild.pas(50): Method ‘Destroy’ hides virtual method of base type ‘TObject’
[Error] SystemBuild.pas(84): Incompatible types

Line 84 is Delete(Node);

I declared the node like this:

type
    TNodePtr = ^TNode;
    TNode = Record
        Data:String;
        Left:TNodePtr;
        Right:TNodePtr;
    end;

And the tree like this:

Type
    TTree = Class
    Private
        Root:TNodePtr;
    Public
        Function GetRoot:TNodePtr;
        Constructor Create;
        Destructor Destroy;
    end;
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-13T21:59:18+00:00Added an answer on May 13, 2026 at 9:59 pm

    The error you see is because of a mistake I made in the answer I gave to your previous question. I wrote Delete when I should have written Dispose. I apologize. Here, then, is the correct destructor implementation:

    destructor TTree.Destroy;
      procedure FreeSubnodes(Node: PNode);
      begin
        if Assigned(Node.Left) then
          FreeSubnodes(Node.Left);
        if Assigned(Node.Right) then
          FreeSubnodes(Node.Right);
        Dispose(Node);
      end;
    begin
      FreeSubnodes(Root);
      inherited;
    end;
    

    The error is not saying that TNodePtr is incompatible with TNode. The error just says “incompatible types” because the compiler doesn’t know what type Delete is supposed to receive. It’s a compiler-magic function that accepts several different parameter types, none of which is compatible with TNodePtr.

    The first compiler message you see is about your Destroy method hiding the method from the base class. It’s not responsible for the problem you were seeing, but you’d eventually notice a problem because your destructor would never get called. When you call Free, it will call TObject’s Destroy method, not your new version. To make yours get called instead, you need to mark yours as overriding the inherited version. Then, when TObject.Free calls Destroy, control will go to your version first, and then go to the base class’s version when you call inherited. Change the declaration to this:

    destructor Destroy; override;
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Ask A Question

Stats

  • Questions 403k
  • Answers 403k
  • Best Answers 0
  • User 1
  • Popular
  • Answers
  • Editorial Team

    How to approach applying for a job at a company ...

    • 7 Answers
  • Editorial Team

    What is a programmer’s life like?

    • 5 Answers
  • Editorial Team

    How to handle personal stress caused by utterly incompetent and ...

    • 5 Answers
  • Editorial Team
    Editorial Team added an answer This error indicates that your assembly is getting loaded into… May 15, 2026 at 5:02 am
  • Editorial Team
    Editorial Team added an answer Usually no. Subversion needs binaries installed, and tight integration with… May 15, 2026 at 5:01 am
  • Editorial Team
    Editorial Team added an answer The $ variable name is not unique to jQuery -… May 15, 2026 at 5:01 am

Trending Tags

analytics british company computer developers django employee employer english facebook french google interview javascript language life php programmer programs salary

Top Members

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.