hjelpe med innlegg på første BST

stemmer
1

EDIT det en liten ting som jeg mangler !! feilen er der fortsatt

Så jeg prøver å lære å kode mitt første BST, og det er vanskelig .... jeg allerede har problemer med bare noen få linjer med kode. problemet er i innsatsen, men jeg har tatt med alt, slik at jeg kunne få noen tilbakemeldinger på mine stil / andre feil. Jeg ble foreslått å bruke en peker til pekeren gjennomføring, men vi har ikke lært det ennå, så jeg ikke føler komfort / vet hvordan å kode det ennå. de

feilen er

[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

den tree.h fil

#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;
}
Publisert på 27/04/2011 klokken 02:15
kilden bruker
På andre språk...                            


4 svar

stemmer
2

Tre test (); ikke hvordan definerer et objekt av klassen Test: Dette erklære acutally funksjon kalt test som returnerer treet.

prøve

Tre test; test.instert (100, "bla"); returnere 0;

Svarte 27/04/2011 kl. 02:34
kilden bruker

stemmer
1

Par punkter:

Du må endre navnet på din medlems variabel roten til noe annet-jeg vil anbefale m_root eller my_root eller tree_root, eller noe av disse former. Akkurat nå har du fått en liten bit av en navne sammenstøt i enhver funksjon hvor du inkluderer roten som et argument. Dette vil også la deg holde oversikt over hvilke rot du refererer til.

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

Du må endre root på kommenterte linjen til root-> -tasten.

Annet enn det, ser det ut som det vil fungere.

EDIT: Også, hva den andre fyren sa. Du erklærer et objekt som

TYPE name ()

hvis du ringer standard konstruktør (), så koden i din viktigste funksjon bør være

Tree test;
test.insert(...)
Svarte 27/04/2011 kl. 02:38
kilden bruker

stemmer
1

Jeg kopierte noen av koden din, og dette fungerer fint for meg:

hoved:

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

Sett inn funksjon:

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

Annet enn at du har syntaksfeil over alt. Jeg endret også navnet fordi som noen påpekte det var litt av en navne problem. CurrentRoot er fornuftig fordi du passerer det roten til venstre eller høyre subtre på hver rekursjon.

Svarte 27/04/2011 kl. 02:39
kilden bruker

stemmer
0

Bør du ikke legge tree.cpptil din bygge kommandoen?

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

Ville bli

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

Svarte 27/04/2011 kl. 04:01
kilden bruker

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