βοηθήσει με ένθετο για πρώτη BST

ψήφοι
1

EDIT ένα μικρό πράγμα που μου λείπει εκεί !! το σφάλμα είναι ακόμα εκεί

Είμαι, λοιπόν, προσπαθούν να μάθουν πώς να κώδικα πρώτο μου BST, και είναι δύσκολο .... Είμαι ήδη πρόβλημα με λίγες μόνο γραμμές των κωδικών. το πρόβλημα είναι στο ένθετο, αλλά έχω συμπεριλάβει τα πάντα, έτσι ώστε θα μπορούσα να πάρω κάποια ανατροφοδότηση σχετικά με το ύφος / άλλα λάθη μου. Ήμουν πρότεινε να χρησιμοποιήσει ένα δείκτη για την εφαρμογή του δείκτη, αλλά εμείς havent μάθει ακόμα, γι 'αυτό dont αίσθηση άνεσης / ξέρουν πώς να το κωδικοποιήσει ακόμα. ο

σφάλμα είναι

[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

το αρχείο 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;
}
Δημοσιεύθηκε 27/04/2011 στις 03:15
πηγή χρήστη
Σε άλλες γλώσσες...                            


4 απαντήσεις

ψήφοι
2

δοκιμή Tree ()? δεν είναι το πώς ορίζουν ένα αντικείμενο της κλάσης Test, Αυτή η πραγματικότητα παρουσίασε δηλώνουν λειτουργία που ονομάζεται τεστ που επιστρέφει δέντρο.

προσπαθήστε

δοκιμή Tree? test.instert (100, "blah")? επιστρέψει 0?

Απαντήθηκε 27/04/2011 στις 03:34
πηγή χρήστη

ψήφοι
1

Δυο σημεία:

Θα πρέπει να αλλάξετε το όνομα της μεταβλητής ρίζας μέλους σας σε κάτι αλλού θα ήθελα να συστήσει m_root, ή my_root, ή tree_root, ή κάτι από αυτά τα είδη. Αυτή τη στιγμή έχετε ένα μικρό κομμάτι από μια σύγκρουση ονομάτων σε κάθε λειτουργία, όπου μπορείτε να περιλαμβάνει ρίζα ως επιχείρημα. Αυτό θα σας αφήσει να παρακολουθείτε ποια ρίζα είστε αναφέρεστε.

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

Θα πρέπει να αλλάξετε root στο σχολίασε γραμμή από ρίζα> κλειδί.

Εκτός από αυτόν, μοιάζει με αυτό θα λειτουργήσει.

EDIT: Επίσης, αυτό που είπε ο άλλος. Μπορείτε να δηλώσετε ένα αντικείμενο ως

TYPE name ()

αν καλείτε το προεπιλεγμένο κατασκευαστή (), έτσι ώστε κωδικό σας σε κύρια λειτουργία σας θα πρέπει να είναι

Tree test;
test.insert(...)
Απαντήθηκε 27/04/2011 στις 03:38
πηγή χρήστη

ψήφοι
1

Αντέγραψα μερικά από κωδικό σας και αυτό λειτουργεί μια χαρά για μένα:

κύριος:

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

Λειτουργία Εισαγωγή:

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

Εκτός από αυτόν έχετε σφάλματα σύνταξης σε όλη τη χώρα. Θα αλλάξει επίσης το όνομα, γιατί όπως κάποιος επεσήμανε υπήρχε ένα μικρό πρόβλημα ονομασίας. CurrentRoot έχει νόημα, γιατί είναι αυτό που περνά η ρίζα του αριστερού ή δεξιού υποδένδρου σε κάθε αναδρομή.

Απαντήθηκε 27/04/2011 στις 03:39
πηγή χρήστη

ψήφοι
0

Σε περίπτωση που δεν μπορείτε να προσθέσετε tree.cppστην εντολή κατασκευή σας;

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

Θα γινόταν

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

Απαντήθηκε 27/04/2011 στις 05:01
πηγή χρήστη

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