سؤال

أحصل على مرجع غير محدد إلى أساليب خاصة واحدة في الفصل. فيما يلي مقتطف قصير من التعليمات البرمجية (ولكن الشيء كله حاليا موجود حاليا في ملف مصدر واحد وعدم فصله إلى ملفات رأس ومصدر).

#include <iostream>

using namespace std;

struct node
{
    int key_value;
    node *left;
    node *right;
};

class btree
{
    node *root;
    btree();
    ~btree();
    void destroy_tree(node *leaf);

    public:
    void destroy_tree();
};

btree::btree()
{
    root = NULL;
}

btree::~btree()
{
    destroy_tree();
}

void btree::destroy_tree()
{
    destroy_tree(root);
}

void destroy_tree(node *leaf)
{
  if(leaf!=NULL)
  {
    destroy_tree(leaf->left);
    destroy_tree(leaf->right);
    delete leaf;
  }
}

int main()
{
    return 0;
}

مخرجات التحويل البرمجي "مرجع غير محدد إلى" BTREE :: DESTER_TREE (عقدة *) "لهذا السطر:

destroy_tree(root);

ولكن ليس تعريف تلك الوظيفة مباشرة أسفله؟

هل كانت مفيدة؟

المحلول

لا يتم استبدال الحمولة الزائد Decord_Tree إلى BTREE. التنفيذ مفقود BTREE :: وهو مطلوب لأنه ليس داخل تعريف الفصل:

 void btree::destroy_tree(node * leaf)
 {
   if(leaf!=NULL)
   {
     destroy_tree(leaf->left);
     destroy_tree(leaf->right);
     delete leaf;
   }
}

نصائح أخرى

المشكلة الرئيسية التي يمكنني رؤيتها هي:

void destroy_tree(node *leaf)

يجب ان يكون:

void btree::destroy_tree(node *leaf)

أيضا لا توجد طريقة لإنشاء كائن BTREE. يجب أن تفعل هذا:

class btree
{
public:
    btree();
    ~btree();

    void destroy_tree();

private:
    void destroy_tree(node *leaf);
    node *root;
};
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top