Hilfe bei Einsatz auf dem ersten BST

stimmen
1

EDIT es eine kleine Sache, die ich vermisst !! der Fehler ist immer noch da

So bin ich versucht zu lernen, wie mein erstes BST codieren, und es schwer ist .... Ich bin schon Probleme, mit nur wenigen Zeilen Code. das Problem ist im Einsatz, aber ich habe alles enthalten, so dass ich ein Feedback auf meine Art / andere Fehler zu bekommen. Ich habe einen Zeiger auf Zeiger-Implementierung verwenden vorgeschlagen, aber wir haben es noch gelernt, so dass ich nicht das Gefühl, Komfort / wissen, wie es noch zu codieren. das

Fehler

[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

die tree.h Datei

#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;
}
Veröffentlicht am 27/04/2011 um 03:15
quelle vom benutzer
In anderen Sprachen...                            


4 antworten

stimmen
2

Baum-Test (); ist nicht wie ein Objekt der Klasse-Test definieren, Funktion mit dem Namen Test deklarieren Diese acutally die Baum zurück.

Versuchen

Baum-Test; test.instert (100, "bla"); return 0;

Beantwortet am 27/04/2011 um 03:34
quelle vom benutzer

stimmen
1

Ein paar Punkte:

Sie müssen den Namen Ihres Membervariable Wurzel zu etwas ändern Else- ich m_root empfehlen würde, oder my_root oder tree_root, oder etwas dieser Art. Gerade jetzt haben Sie ein wenig von einem Namespace Zusammenstoß in einem beliebigen Funktion bekommen, wo Sie root als Argument enthalten. Dies wird Ihnen auch im Auge behalten können, welche Wurzel Sie sich beziehen.

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);
    }

Sie müssen root auf der kommentierten Zeile ändern, um Wurzel-> drücken.

Other than that, es sieht aus wie es funktionieren wird.

EDIT: Auch, was der andere Kerl sagte. Sie erklären, ein Objekt als

TYPE name ()

wenn Sie den Standard-Konstruktor () aufrufen, so dass Ihr Code in Ihre Hauptfunktion sollte

Tree test;
test.insert(...)
Beantwortet am 27/04/2011 um 03:38
quelle vom benutzer

stimmen
1

Ich kopierte einige Code und das funktioniert gut für mich:

Main:

#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;
    }

Legen Sie Funktion:

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);
}

Anders als das haben Sie Syntaxfehler in dem ganzen Ort. Ich habe auch den Namen, weil als jemand darauf hingewiesen, es ein bisschen wie ein Name Problem war. CurrentRoot macht Sinn, weil Sie es die Wurzel der linken oder rechten Unterbaum auf jeder Rekursion sind vorbei.

Beantwortet am 27/04/2011 um 03:39
quelle vom benutzer

stimmen
0

Sollten Sie nicht hinzufügen , tree.cppum Ihren Build - Befehl?

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

Würde werden

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

Beantwortet am 27/04/2011 um 05:01
quelle vom benutzer

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