Weiß nicht wo der Fehler liegt...
-
Hi @ all
hab ein Problem mit einem Funktionsausruf aus einer Klasse, weiß aber nicht woran es liegen könnte.
Der Compiler gibt als Fehlermeldung immer nur das aus:
In functionmain': Zeile:8 undefined reference toFeld::print_feld(char const*)Hier ma die codes:
main:#include <iostream> #include "data.h" using namespace std; int main() { Feld feld1; feld1.print_feld( "blabla" ); }data.h:
#include <iostream> #ifndef _DATA_H_ #define _DATA_H_ using namespace std; class Feld { public: void print_feld ( const char* bla ); }; int print_feld ( const char* bla ) { cout << bla; }; #endifDanke schonmal im vor raus für hilfreiche Tipps.
-
void Feld::print_feld ( const char* bla ) { cout << bla; };Fieser Fehler.

Du hast da keine Memberfunktion definiert, sondern eine freie Funktion. Dann hast du die Funktion auf das Objekt aufrufen wollen, der Linker konnte die aber nicht finden. Darum der Fehler.
-
Du definierst in der Header-Datei nur eine globale Funktion
int print_feld(const char *bla). Was du aber eigentlich definieren willst, ist die Methode der KlasseFeld(und zwar mit Rückgabetypvoid, nichtint). Ein weiterer Fehler ist, dass du die Methoder in der Header-Datei definierst und nicht nur deklarierst. In eine Header-Datei gehören nur die Deklarationen. Die Definitionen gehören in eine eigene .cpp-Datei, also müsste das ganze wie folgt aussehen:main.cpp:
#include "data.h" using namespace std; int main() { Feld feld1; feld1.print_feld( "blabla" ); }data.h (wieso nicht Feld.h? oder sind noch andere Klassen in der eigentlichen Datei?)
#ifndef _DATA_H_ #define _DATA_H_ class Feld { public: void print_feld ( const char* bla ); }; #endifdata.cpp (beziehungsweise Feld.cpp)
#include "data.h" #include <iostream> using namespace std; void Feld::print_feld ( const char* bla ) { cout << bla; };Eine weitere Sache ist, dass man niemals using namespace std; (oder auch andere Namespaces) in Hearder-Dateien benutzen sollte. Sonst wird in jeder Datei, in der man den Header benutzt der gesamte Namensraum std importiert, was den Zweck von Namensräumen aufhebt.
Ich hoffe, dass hilft uns verwirrt nicht nur
Sonst frag nochmal nach.Felix
EDIT1: Courier für inline-Code
EDIT2: Voraus wird mit einem r und zusammen geschrieben
-
Jetzt funktionierts, danke.
Heißt deshalb daten, weil ggf. noch mehr rein muss, weiß no ned genau
Eigentlich ist eine externe .cpp datei doch angeblich nur übersichtlicher,
finds aba so auch ok@ Phoemuex:
versuch ma vor raus zusammen zu schreiben^^mfg Duck93
-
Duck93 schrieb:
versuch ma vor raus zusammen zu schreiben^^
Das Wort gibts ja auch nicht...
-
Duck93 schrieb:
Heißt deshalb daten, weil ggf. noch mehr rein muss, weiß no ned genau
Eigentlich ist eine externe .cpp datei doch angeblich nur übersichtlicher,
finds aba so auch okNicht nur "angeblich". Wenn man für jede grössere Klasse eine eigenen eigenen Header und eine Implementierungsdatei hat, kann man neben der besseren Übersicht auch gezielt Dateien einbinden und Abhängigkeiten minimieren.
Duck93 schrieb:
@ Phoemuex:
versuch ma vor raus zusammen zu schreiben^^Er sagte ja mit einem 'r'...