Problem mit Klasse in Vector
-
Hallo dieses Beispiel habe ich in meinem Buch gefunden und jetzt wollte ich damit mal etwas rum experimentieren.
Aber ich bekomme immer diese Fehlermeldung:
[ILINK32 Fehler] Error: Nicht aufl÷sbares externes 'get_token()' referenziert von C:\USERS\user\DOCUMENTS\RAD STUDIO\PROJEKTE\DEBUG\FILE1.OBJ
Nur kann ich damit nicht so viel Anfangen.

#include <iostream> #include <vector> using namespace std; class Token{ public: char kind; double value; Token( char ch ) : kind (ch) {} Token( char ch, double val ) : kind (ch) , value (val) {} }; Token t1 ('+'); Token t2 ('8',11.5); Token get_token(); vector<Token> tok; int main(int argc, char* argv[]) { while ( cin ) { Token t = get_token(); tok.push_back (t); } return 0; }
-
Es fehlt die Definition der Funktion get_token(). Das Beispiel ist unvollständig. Hat übrigens überhaupt nichts mit vector und Klassen zu tun.
-
Wo nimmst du das
ther ?

-
Das stand so in dem Beispiel drin.
Auch weiss ich nicht was das hier soll: Token get_token();
Ich hab mir das mal etwas umgeschrieben über t.get_token(); kann ich ja die Funktion get_token(); aufrufen aber was soll das Token get_token(); ?
Ich dachte halt mit dem Beispiel könnte man schon was rum experimentieren aber gerade habe ich gesehen das es zu dem Thema kommt noch eine ganze Menge Seiten in dem Buch gibt daher werd ich wohl erst mal einfach weiterlesen.
#include <iostream> #include <vector> using namespace std; class Token{ public: char kind; double value; void get_token(); Token( char ch ) : kind (ch) {} Token( char ch, double val ) : kind (ch) , value (val) {} }; void Token :: get_token() { cout<<"test " ; } Token get_token(); int main(int argc, char* argv[]) { Token t('A'); t.get_token( ) ; return 0; }
-
ve_c schrieb:
Ich dachte halt mit dem Beispiel könnte man schon was rum experimentieren aber gerade habe ich gesehen das es zu dem Thema kommt noch eine ganze Menge Seiten in dem Buch gibt daher werd ich wohl erst mal einfach weiterlesen.
Nein, fang lieber nochmal weiter vorne an. Du hast da essentielle Grundlagen nicht verstanden, wenn du nicht weißt, was diese Zeilen bedeuten.
-
Token get_token(); <-- So was stand da aber komischerweise nicht.
Auch Klassen wurden in dem Buch bisher noch nicht behandelt sowas kommt erst später.
Das Buch was ich lese heisst: Einführung in die Programmierung mit C++
Autor: Bjarne StroustrupAlso auf Seite 205 kommt das Beispiel mit dem Token und auf Seite 317 da gehts los mit den Klassen ...
Aber vielleicht kann mir ja trotzdem jemand verraten was hier genau passiert:
Token get_token();
-
ve_c schrieb:
Aber vielleicht kann mir ja trotzdem jemand verraten was hier genau passiert:
Token get_token();
Kurzfassung: Das ist die Deklaration für eine (globale) Funktion, die keine Parameter nimmt und ein Token zurückliefert. Damit ist der Compiler zufrieden, weil er damit weiß, was ausdrücke wie "Token t = get_token();" zu bedeuten haben. Um das Programm ausführen zu können, benötigst du allerings noch eine Definition für diese Funktion (d.h. den Quelltext).
PS: Und wenn nicht irgendwo weiter vorne in dem Buch diese Definition steht, solltest du es wegwerfen und ein anderes Buch suchen.
-
Ich kann mir nicht vorstellen, dass ausgerechnet der Struppi seine Beispiele nicht im Griff hat. In diesem Fall habe ich damit jedenfalls recht, denn es handelt sich hierbei nicht um ein Beispiel, sondern um drei Codefragmente auf einer Seite, die verdeutlichen sollen, wie der Code später zu benutzen ist. Im Buch steht etwa Folgendes (Ich tipp das nicht alles ab; wer will, kann es auf Google Books nachlesen):
Token ist ein Beispiel für einen benutzerdefinierten Typ in C++. Text, der erklärt, was das bedeutet.
class Token{ public: char kind; // auf der rechten Seite stehen auch noch double value; // ein paar Kommentare Token( char ch ) : kind (ch) {} Token( char ch, double val ) : kind (ch) , value (val) {} };Kurze Erläuterung zu Konstruktoren. Das sieht dann etwa so aus:
Token t1 ('+'); Token t2 ('8',11.5);Erläuterung, was das bedeutet.
Überschrift für neue Sektion
Vielleicht können wir damit einen Taschenrechner bauen. Aber vorher kurz nachdenken: Wie würde das etwa aussehen? Man könnte vielleicht in einen Vektor einlesen:
Token get_token(); vector<Token> tok; int main(int argc, char* argv[]) { while ( cin ) { Token t = get_token(); tok.push_back (t); } return 0; }Mehr Text
Mein Rat an den TE ist, den Text um die Codefragmente zu lesen, dann sollte das alles viel klarer werden.
-
Ab Seite 223 steht was zur get_token(); Funktion das war wohl noch kein Beispiel zum ausprobieren ich hätte anscheind nur etwas weiterlesen müssen.