undefined reference
-
In 2 verschiedenen Source Dateien? Wenn ja, dann musst du die beiden Source Dateien zusammen linken, da der Linker sonst nicht weiß wo er suchen muss. Wie das geht hängt vom Compiler ab.
Ansonsten verstehe ich nicht, was dein Ctor machen soll

-
Die fehlermeldung scheint aber auch für etwas anderes zu stehen
da ich eine funktion habe bei der er mir genau die selbe fehlermeldung ausgibt
der witz daran ich habe eine funktion SaveGuestBook();
die funktioniert die habe ich kopiert und und nur den teil ausgetauscht der daten schreibt gegen das datenlesen und jetzt funktionier das nicht mehr
und es kommt diese fehlermeldung komischerweise auch ohne zeilennummermain.cpp
ReadGuestBook();gaestebuch.h
void ReadGuestBook();gaestebuch.cpp
void ReadGuestbook() { char * dat_ein; char * token; char sLine[256]; char Trenner[] = "|@|"; dat_ein = "E:\\prog\\src\\Zeile\\Zeile.txt"; ifstream Datei(dat_ein); if ( !Datei ) { cout << "Kann Datei ( " << dat_ein << " ) nicht öffnen" << endl; } while(!Datei.eof()) { Datei.getline(sLine, 256); cout << "Zeile :" << sLine << endl; // Zeile auseinandernehmen. token = strtok(sLine, Trenner); while( token != NULL ) { cout << "Token = " << token << endl; token = strtok(NULL, Trenner); } } // return 0; }
-
es reicht nicht nur, die readguestbook.h zu includieren in die main.cpp. Wenn du das ganze kompilieren willst, musst du sowohl die main.cpp als auch die readguestbook.cpp gleichzeitig an den compiler schicken bzw. wenn du schrittweise compilierst (also main.o und readguestbook.o als objektdateien kompiliert hast), dann musst du beide objektdateien an den Linker schicken.
Die hpp zu inkludieren reicht nicht, weil die dem Compiler nur sagt, dass es die Funktion gibt. Aber nicht, wie sie aussieht.
-
Und warum funktioniert das ganze dann mit readguestbook?
saveguestbook ist eine kopie von readuestbook
ich habe also einfach alles von readguestbook kopiert und dann read durch save ersetzt und nun meckert er
wenn der fehler daher kommt wie ihr schreibt warum meckert er dann nicht bei readguestbook
deswegen meint ich ja die fehlermeldung muss noch für was anderes stehen
-
schreib mal bitte hier hin:
-
eine Liste deiner Dateien, die du benutzt (die quellcodes sind denke ich mal nicht nötig)
-
den Compileraufruf, mit dem du den ganzen Krempel compilierst.
undefined reference heißt einzig und allein, dass der Linker die Definition einer Funktion nicht gefunden hat, die an anderer Stelle aufgerufen wurde. Und da nur der Linker meckert, heißt das, dass die einzelnen cpp's ordentlich compiliert wurden und die Deklaration der Fuktion auch immer schön mit eingebunden worden ist. Es heißt nicht zusätzlich was anderes. Es sei denn du benutzt irgendeinen fragwürdigen kraut-und-rüben-compiler, dessen entwickler so bedeppert waren, mehrdeutuge Fehlermeldungen zu bringen...
-
-
erstens:
ja ich benutze einen Kraut und RübenKompiler(IDE)dessen programmierer zu blöd sind
nämlich DEV-C++ *ironie*so da ich ne ide nutze kenn ich den kompiler aufruf nicht
hier mal den quellcode da beide funktionen ja in der selben datei sind
und wie gesagt die eine funktion funktioniert die andere nichtgaestebuch.cpp
#include "gaestebuch.h" void ReadGuestbook() { char * dat_ein; char * token; char sLine[256]; char Trenner[] = "|@|"; dat_ein = "E:\\prog\\src\\Zeile\\Zeile.txt"; ifstream Datei(dat_ein); if ( !Datei ) { cout << "Kann Datei ( " << dat_ein << " ) nicht öffnen" << endl; } while(!Datei.eof()) { Datei.getline(sLine, 256); cout << "Zeile :" << sLine << endl; // Zeile auseinandernehmen. token = strtok(sLine, Trenner); while( token != NULL ) { cout << "Token = " << token << endl; token = strtok(NULL, Trenner); } } // return 0; } //------------------------------------------------------------------------------------------ void SaveGuestBook(struct gBook room) { time_t rawtime; time ( &rawtime ); room.gDATE = ctime (&rawtime); //hier wird der Datensatz zusammengestellt als Trennzeichen wird |@| verwendet string strgMESSAGE = room.gDATE + "|@|" + room.gTITEL + "|@|" + room.gEMAIL + "|@|"+ room.gUSERNAME + "|@|"+ room.gTEXT; ofstream dat_aus; dat_aus.open("Guestbook/Guestbook.txt", ios_base::app); /*Beretta: Dateiname nun Fest. ios_base::app; neue Daten werden nun angehängt.*/ if(!dat_aus) { cout<<"Error, cant find file!"<<endl; } dat_aus<<strgMESSAGE<<endl; dat_aus.close(); }gaestebuch.h
#ifndef __GAESTEBUCH_H__ #define __GAESTEBUCH_H__ #include <iostream> // Include this for the cin/cout classes #include <fstream> // Include this for the ifstream class #include <string> // Include this for the string class #include <windows.h> // Include this for the WindowsAPI class #include <vector> // Include this for the vector class using namespace std; // Use the standard namespace struct gBook { //Dies sind die benötigten strings fürs Gästebuch string gDATE; // Datum und Uhrzeit des Eintrages string gTITEL; // Titel des Eintrages string gEMAIL; // Die Email der users der den Eintrag vornahm string gUSERNAME; // Den Usernamen der angegeben wurde string gTEXT; // Dies ist der eingebene Text }; void ReadGuestBook(); void SaveGuestBook(struct gBook); #endifund auschnitt aus main.cpp
[cpp]
.
.
.
#include "gaestebuch.h".
.
.else if (r->path_ == "/Guestbook/") {
title = "Gästebuch";body = "<h1>Fill a form</h1>";
body += "<form action='/Guestbook'>"
"<table>"
"<tr><td>Titel</td><td><input name=gTITEL size=\"45\"></td></tr>"
"<tr><td>E-Mail</td><td height=\"82\"><input name=gEMAIL size=\"45\"></td></tr>"
"<tr><td>Name</td><td height=\"82\"><input name=gUSERNAME size=\"45\"></td></tr>"
"<tr><td>Text</td><td><textarea name=\"gTEXT\" cols=\"41\" rows=\"8\"></textarea></td></tr>"
"</table>"
"<input type=submit></form>";struct gBook room = { "30/02/05", "Das ist Der TITEL", "SKIPPY@GMX:DE", "SKIPPY", "DER Blöde TEXT"} ;
for (std::map<std::string, std::string>::const_iterator i = r->params_.begin();
i != r->params_.end();
i++) {body += "<br>" + i->first + " = " + i->second;
if(i->first == "gTITEL") {room.gTITEL = i->second;}
if(i->first == "gEMAIL") {room.gEMAIL = i->second;}
if(i->first == "gUSERNAME") {room.gUSERNAME = i->second;}
if(i->first == "gTEXT") {room.gTEXT = i->second;}
}ReadGuestBook(); hier taucht dann der fehler auf
SaveGuestBook(room);body += "<hr>" + links;
}.
.
.
[/cpp]
-
[cpp]
<h1>Fill a form</h1>[/cpp]
-
sorry das liegt an den html tags in den jeweiligen strings das forum hat dietrotz das es in c++ code tags ist als html tags interpretiert
liegt also an der forensoftware
-
ganz banaler typo:
du hast die Funktion deklariert als void ReadGuestbook, rufst sie aber auf als ReadGuestBook.
Musst schon auf groß-kleinschreibung achten...
-
@ pumuckl THX
hast recht schreiben müsste ich können LOL
darauf muss man als anfänger erstmal kommen das bei einem schreibfehler ne unterschiedliche meldung je nachdem wo er ist Beispiel
schreibfehler der funktion in der *.h dann kommt irgendwas mit undifinierte function use ...
schreibfehler in der *.cpp dann undifienierte referenz
wie ich das allerdings fertig genracht habe bei kopieren und einfügen mit der maus
die groß und kleinschreibung zu ändern bleibt mir weiterhin schleierhaft@Karl Blau vielleicht solltest auch nochmal kontrollieren
