ajuta cu inserție pe primul BST

voturi
1

EDIT există un lucru mic pe care eu lipsesc !! eroarea este încă acolo

Deci, eu sunt încercarea de a învăța cum să cod primul meu BST, și este greu .... Sunt care au deja probleme cu doar câteva linii de coduri. problema este în insera, dar am inclus tot, astfel încât am putea obține un feedback pe stilul meu / alte erori. Am fost sugerat de a utiliza un pointer la punerea în aplicare pointer, dar am havent învățat încă, așa că am dont simt confort / știu cum să-l cod încă.

eroare este

[trinhc@cs1 Assignment_3]$ g++ movieList.cpp -o a.out
/tmp/ccLw6nsv.o: In function `main':
movieList.cpp:(.text+0x7a): undefined reference to `Tree::Tree()'
movieList.cpp:(.text+0xa7): undefined reference to `Tree::insert(int, std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
collect2: ld returned 1 exit status

fișierul tree.h

#ifndef TREE_H
#define TREE_H

#include <string>
#include <iostream>
using namespace std;

class Tree
{
 public:
  Tree();
  bool insert(int k, string s);

 private:
  struct Node
  {
    int key;
    string data;
    Node *left;
    Node *right;
  };
  Node* root;
  bool insert(Node*& root, int k, string s);
};

#endif

tree.cpp

#include <iostream>
#include tree.h
#include <stack>
#include <queue>
#include <string>
using namespace std;

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

bool Tree::insert(int k, string s)
{
  return insert(root, k, s);
}

bool Tree::insert(Node*& current_root, int k, string s)
{
  if(root == NULL){
    current_root = new Node;
    current_root->key = k;
    current_root->data = s;
    current_root->left = NULL;
    current_root->right = NULL;
    return true;
  }
  else if (current_root->key == k)
    return false;
  else if (current_root->key > k)
    insert(current_root->left, k, s);
  else
    insert (current_root->right,k, s);
}

movieList.cpp

#include <iostream>
#include <stack>
#include <queue>
#include <string>
#include tree.h


using namespace std;

int main()
{
  Tree test;
  test.insert(100, blah);
  return 0;
}
Întrebat 27/04/2011 la 03:15
sursa de către utilizator
În alte limbi...                            


4 răspunsuri

voturi
2

test de copac (); nu este modul în care definesc un obiect de test de clasă, declară Această acutally funcție de test numit care returnează copac.

încerca

test de copac; test.instert (100, "bla"); return 0;

Publicat 27/04/2011 la 03:34
sursa de către utilizator

voturi
1

Câteva puncte:

Trebuie să modificați numele dvs. rădăcină variabilă membru la ceva else- mi-ar recomanda m_root, sau my_root sau tree_root, sau ceva de aceste soiuri. Chiar acum ai un pic de o ciocnire spațiu de nume în orice funcție în care includ rădăcină ca argument. Acest lucru va permite, de asemenea, să urmăriți care rădăcină te referi.

bool Tree::insert(Node*& root, int k, string s)
{
    if(root == NULL){
        root = new Node;
        root->key = k;
        root->data = s;
        root->left = NULL;
        root->right = NULL;
        return true;
    } else
        if (root == k) //Comparison between pointer and number.
            return false;
        else
            if (root->key > k)
                insert(root->left, k, s);
            else
                insert (root->right,k, s);
    }

Trebuie să schimbați rădăcină de pe linia de comentat Rădăcină-> tasta.

Altele decât atât, se pare că va funcționa.

EDIT: De asemenea, ceea ce a spus celalalt. Declari un obiect

TYPE name ()

daca produsul este constructorul implicit (), astfel încât codul în funcția principală ar trebui să fie

Tree test;
test.insert(...)
Publicat 27/04/2011 la 03:38
sursa de către utilizator

voturi
1

Am copiat o parte din codul și acest lucru este de lucru bine pentru mine:

principal:

#include <iostream>
#include <stack>
#include <queue>
#include <string>
#include "tree.h"

    int main()
    {
      Tree test;
      test.insert(100, "blah");
      test.insert(50, "fifty");
      test.insert(110, "one hundred ten");
      return 0;
    }

Funcția Insert:

bool Tree::insert(Node*& currentRoot, int k, string s)
{
  if(currentRoot == NULL){
    currentRoot = new Node;
    currentRoot->key = k;
    currentRoot->data = s;
    currentRoot->left = NULL;
    currentRoot->right = NULL;
    return true;
  }
  else if (currentRoot->key == k)
    return false;
  else if (currentRoot->key > k)
    insert(currentRoot->left, k, s);
  else
    insert (currentRoot->right,k, s);
}

Altele decât cele pe care le aveți erori de sintaxă peste tot. Am schimbat, de asemenea, numele pentru că așa cum cineva a subliniat că a fost un pic de o problemă de denumire. CurrentRoot are sens pentru că voi trece-l rădăcina subarborelui stânga sau la dreapta pe fiecare recursivitate.

Publicat 27/04/2011 la 03:39
sursa de către utilizator

voturi
0

Nu ar trebui să adăugați tree.cppla comanda ta construi?

[Trinhc @ CS1 Assignment_3] $ g ++ movieList.cpp o- a.out

Ar deveni

[Trinhc @ CS1 Assignment_3] $ g ++ tree.cpp movieList.cpp o- a.out

Publicat 27/04/2011 la 05:01
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more