[C++] probleem met template::int wel en float niet

Pagina: 1
Acties:

  • koli-man
  • Registratie: Januari 2003
  • Laatst online: 29-06 12:23

koli-man

Bartender!!!!

Topicstarter
Goedendag gotters

ik heb deze classes(versimpelde vorm)
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
template <class T>
class Stack
{
  private:
     Node<T> *First;
     int items;
  public:
     //     canoniek class-interface
     Stack();
     ~Stack();
     Stack(const Stack<T>& _Stack);
     Stack<T>& operator=(const Stack<T>& _Stack);

     void AddToStack(const T _T);
};


template <class T>
class Node
{
  private:
    T Item;
    Node<T> *next;
  public:

    //canonic
    Node();
    ~Node();
    Node(const Node<T>& _Node);
    Node<T>& operator=(const Node<T>& _Node);

    //set private vars
    void setItem(const T& _Item);
    void setNext(Node* _Node);

};


Ja..nou roep ik deze functie aan...
C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
template <class T>
void Stack<T>::AddToStack(const T _T)
{
  Node<T> *tempnode = new Node<T>;
  tempnode->setItem(_T);

  if(First==NULL)First = tempnode;
  else
    {
       tempnode->setNext(First);
       First = tempnode;
    }
}



Mijn probleem: Bij integers doet hij het wel en bij floats niet.
Tja als hij het bij integers en floats zou doen zou je er ook fietsebellen aan
kunnen hangen en dat wil ik nou net bereiken.


thnx


hmmz het zal wel net toeval zijn geweest, maar met integers doet hij het ook al niet meer. Tja, maar het probleem blijft er in ieder geval. Het lijkt net als of hij geen instance van een node maakt. Want het adres bestaat wel maar blijft totaal leeg, net zoals de variabelen van node


Ik heb dus ontdekt dat als ik in de functie void Stack<T>::AddToStack(const T _T)
de regel Node<T> *tempnode = new Node<T> aanpas naar
Node<int> *tempnode = new Node<int>;
dan werkt het maar dan snap ik nog steeds niet waarom het fout gaat

[ Voor 32% gewijzigd door koli-man op 05-06-2003 00:27 . Reden: debug resultaat erbij gevoegd ]

Hey Isaac...let's go shuffleboard on the Lido - deck...my site koli-man => MOEHA on X-Box laaaiiiff


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

C++:
1
void AddToStack(const T _T); 
maak daar 'ns een const T & van ;)

Maar "hij doet het niet" is nogal summier. Werkt het gewoon niet? Of krijg je een compile-error? Wat gaat er nou precies fout
En welke compiler gebruik je?

.edit: ik zie verder geen fouten in je code, behalve dat je Node niet hebt gedeclareerd voordat je Stack declareert

[ Voor 22% gewijzigd door .oisyn op 05-06-2003 10:42 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • koli-man
  • Registratie: Januari 2003
  • Laatst online: 29-06 12:23

koli-man

Bartender!!!!

Topicstarter
.oisyn schreef op 05 June 2003 @ 10:37:
C++:
1
void AddToStack(const T _T); 
maak daar 'ns een const T & van ;)
dat had al verbeterd maar je had gelijk

Maar "hij doet het niet" is nogal summier. Werkt het gewoon niet? Of krijg je een compile-error? Wat gaat er nou precies fout
En welke compiler gebruik je?
compiler : borland
Ik krijg geen compiler fout, maar als de constructor AddToStack(const T& _T) aanroep, en die roept hij gewoon aan en ziet er zo uit,
[code=c++]
template <class T>
Node<T>::Node()
{
next = NULL;
}
[/code]
als ik dan in next probeer te kijken nadat ik natuurlijk voorbij ben gestapt :)
dan geeft hij "undefined symbol next, dus hij maakt geen instance van Node, terwijl hij NB in de constructor dat net gedaan heeft.


.edit: ik zie verder geen fouten in je code, behalve dat je Node<T> niet hebt gedeclareerd voordat je Stack<T> declareert

deze classes staan niet in één file maar heb de header van node ge-include bij de stack dus dat is goed
als ik in de class stack bij de private vars Node<T> *First; verander in void *First;
werkt het wel en maakt hij wel een Node. Maar die void pointer kan ik niet meer casten naar (Node<T>*).

Als ik de main of zo een aanroep zoals bijv
C++:
1
Node<int> *theNode =  new Node<int>()
maakt hij wel een goede node.

[ Voor 9% gewijzigd door koli-man op 05-06-2003 11:00 ]

Hey Isaac...let's go shuffleboard on the Lido - deck...my site koli-man => MOEHA on X-Box laaaiiiff


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je hebt een wat vervelende manier van quoten, want nu kan ik jouw tekst niet quoten omdat dat in mijn quote staat (en er dus uitgefilterd wordt)
als ik dan in next probeer te kijken nadat ik natuurlijk voorbij ben gestapt :)
dan geeft hij "undefined symbol next, dus hij maakt geen instance van Node, terwijl hij NB in de constructor dat net gedaan heeft.
Dus je krijgt wel een compile-error? Ik snap eigenlijk niet wat je nou precies bedoelt :)
Waar krijg je die 'undefined symbol next' ?

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • koli-man
  • Registratie: Januari 2003
  • Laatst online: 29-06 12:23

koli-man

Bartender!!!!

Topicstarter
.oisyn schreef op 05 June 2003 @ 11:12:
Je hebt een wat vervelende manier van quoten, want nu kan ik jouw tekst niet quoten omdat dat in mijn quote staat (en er dus uitgefilterd wordt)


[...]


Dus je krijgt wel een compile-error? Ik snap eigenlijk niet wat je nou precies bedoelt :)
Waar krijg je die 'undefined symbol next' ?
als ik gewoon de hele applicatie compileer geeft hij geen fouten of warnings. Alleen, als ik (weet niet of je bekend bent met Borland) in de constructor van de Node<T> zit, en probeer dan te kijken wat er in next zit (mbv ctrl en linkermuisknop) dan krijg ik die 'undefined symbol next'

Hey Isaac...let's go shuffleboard on the Lido - deck...my site koli-man => MOEHA on X-Box laaaiiiff


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

Dat heeft niets met de compiler te maken, maar gewoon een brakke syntax parser van borland. Dat heeft niets met je code te maken

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • koli-man
  • Registratie: Januari 2003
  • Laatst online: 29-06 12:23

koli-man

Bartender!!!!

Topicstarter
.oisyn schreef op 05 June 2003 @ 11:24:
Dat heeft niets met de compiler te maken, maar gewoon een brakke syntax parser van borland. Dat heeft niets met je code te maken
hmmz..je hebt gelijk. Als ik dan even een testfunctie maak om (in de main) te kijken wat er in een Node zit, dan geeft hij me de goede waarde. thnx

Hey Isaac...let's go shuffleboard on the Lido - deck...my site koli-man => MOEHA on X-Box laaaiiiff


  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 21-08 17:14
Je hebt een ongeinitialiseerde variabele, denk ik
Als Stack::First niet in Stack::Stack() wordt geinitialiseerd is deze vrijwel zeker geen NULL, maar garbage. Je test om te kijken of je aan het eerste element toevoegt klopt dan niet.

Sowieso valt er nog wel wat op je class aan te merken. Een Node<T> moet een T bevatten, waarom geef je die T dan niet mee aan de Node ctor?
De class Node is niet bestemd voor gebruik buiten Stack, maak het dan een nested class.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein


  • koli-man
  • Registratie: Januari 2003
  • Laatst online: 29-06 12:23

koli-man

Bartender!!!!

Topicstarter
MSalters schreef op 05 June 2003 @ 21:35:
Je hebt een ongeinitialiseerde variabele, denk ik
Als Stack::First niet in Stack::Stack() wordt geinitialiseerd is deze vrijwel zeker geen NULL, maar garbage. Je test om te kijken of je aan het eerste element toevoegt klopt dan niet.
De constructor van Stack heb ik wel gemaakt maar was niet relevant voor mijn probleem in dit geval. Echter First werd wel dus geinitialiseerd in de constructor
Sowieso valt er nog wel wat op je class aan te merken. Een Node<T> moet een T bevatten, waarom geef je die T dan niet mee aan de Node ctor?
Daar heb je een punt ;)
De class Node is niet bestemd voor gebruik buiten Stack, maak het dan een nested class.
hmmz... de class Node kan ook voor andere doeleinden gebruikt worden en niet expliciet alleen bij een Stack. Met een nested class wordt dit moeilijker. ;)

[ Voor 4% gewijzigd door koli-man op 10-06-2003 08:52 ]

Hey Isaac...let's go shuffleboard on the Lido - deck...my site koli-man => MOEHA on X-Box laaaiiiff


  • MisterData
  • Registratie: September 2001
  • Laatst online: 22-08 19:41
.oisyn zei het ook al, dit is niet echt een handige manier van quoten. Plaats voortaan tussen de quotes door het volgende:

code:
1
[/quote] mijn commentaar [quote]


Zo wordt de quote onderbroken en gaat hij weer verder, met als gevolg dat je bericht goed gequote kan worden :)
Pagina: 1