试图在另一个类函数中使用成员类函数

时间:2014-04-14 03:18:46

标签: c++ class recursion tree member

我在尝试使项目的基本布局正常工作时遇到了一些麻烦。我试图从我的一个类函数调用中的另一个类调用一个函数。希望这更容易理解:

Node.h:

 1 #ifndef _NODE_H
 2 #define _NODE_H
 3
 4 #include<iostream>
 5 #include<string>
 6
 7 using namespace std;
 8
 9 class Node
 10 {
 11  public:
 12    Node(string *key, string *data, Node *parent);
 13 //   string *get_key();
 14  //  string *get_data();
 15   // Node *get_left();
 16  //  Node *get_right();
 17   // Node *get_parent();
 18    ~Node();
 19
 20    string *m_key;
 21    string *m_data;
 22    Node *m_left;
 23    Node *m_right;
 24    Node *m_parent;
 25 };
 26
 27
 28 #endif

Node.cpp:

 1 #include "Node.h"
 2 #include<iostream>
 3
 4 using namespace std;
 5
 6 Node::Node(string *key, string *data, Node *parent)
 7 {
 8  m_key = key;
 9  m_data = data;
 10  m_parent = parent;
 11  m_left = NULL;
 12  m_right = NULL;
 13 }

BST.h

  1 #ifndef _BST_H
  2 #define _BST_H
  3
  4 #include"Node.h"
  5
  6 #include<iostream>
  7 #include<string>
  8 #include<fstream>
  9
  10 class BST
  11 {
  12  public:
 13   friend class Node;
 14   BST();
 15   ~BST();
 16   void insert(string key, string data);
 17   void insert(Node *root, Node *check_node);
 18   void in_order_tree_walk(Node *root);
 19   void tree_delete(Node *root, Node *cur_node);
 20   void tree_transplant(Node *root, Node *node_one, Node *node_two);
 21   Node *tree_search(Node *root, string *key);
 22
 23  private:
 24   Node *m_root;
 25 };
 26
 27 #endif

BST.cpp:

  1 #include "Node.h"
  2 #include "BST.h"
  3 #include<iostream>
  4
  5 using namespace std;
  6
  7 BST::BST()
  8 {
  9  m_root = NULL;
  10 }
  11
  12 void BST::insert(string key, string data)
  13 {
  14  string *my_key = new string(key);
  15  string *my_data = new string(data);
  16
  17  Node *my_node = new Node(my_key, my_data, NULL);
  18
  19  insert(m_root, my_node);
  20 }
  21
  22 void BST::insert(Node *root, Node *check_node)
  23 {
  24  Node *node_one = NULL;
  25  Node *node_two = root;
  26
  27  while(node_two != NULL)
  28  {
  29   node_one = node_two;
  30   if( *(check_node->m_key) < *(node_two->m_key))
  31   {
  32    node_two = node_two->m_left;
  33   }
  34   else
  35   {
  36    node_two = node_two->m_right;
  37   }
  38  }
  39
  40  check_node->m_parent = node_one;
  41
  42  if(node_one == NULL)
  43  {
  44   root = check_node;
  45  }
  46  else if( *(check_node->m_key) < *(node_one->m_key) )// may have to dereference
  47  {
  48   node_one->m_left = check_node;
  49  }
  50  else
  51  {
  52   node_one->m_right = check_node;
  53  }
  54 }

BSTapp.h:

  1 #ifndef _BSTAPP_H
  2 #define _BSTAPP_H
  3
  4 #include"BST.h"
  5 #include"Node.h"
  6
  7 #include<iostream>
  8 #include<string>
  9
 10 using namespace std;
 11
 12 class BSTapp
 13 {
 14  public:
 15    void insert(string key, string data);
 16   // void find(string key);
 17   // void do_delete(string key, string data);
 18    void print();
 19   // int quit();
 20  private:
 21    class BST;
 22 };
 23
 24
 25 #endif
 26
 27 int main()
 28 {
 29  BSTapp myapp;
 30
 31  string command;
 32  cin >> command;
 33
 34  while(command != "quit")
 35  {
 36   if(command == "insert")
 37   {
 38    string a, b;
 39    getline(cin, a);
 40    getline(cin, b);
 41    myapp.insert(a,b);
 42   }
 43  }
 44 }

BSTapp.cpp:

 1 #include"BSTapp.h"
 2 #include"Node.h"
 3 #include"BST.h"
 4
 5 #include<iostream>
 6 #include<string>
 7
 8 using namespace std;
 9
10 void BSTapp::insert(string key, string data)
11 {
12   BSTapp::BST::insert(key, data);
13
14 }
15

基本上我想要做的是从BSTapp类调用insert,然后从BST类的插入函数调用insert中调用insert。我在使用这种语法时遇到了很多麻烦。如果有人能指出我正确的方向,那将会有很大的帮助。我使用BSTapp作为模板,然后使用BST进行树操作

1 个答案:

答案 0 :(得分:0)

你有一个BSTapp对象(myapp),所以你可以调用myapp.insert()。 但是你没有BST对象,所以你不能调用它的insert方法。