undefined reference to
-
DocShoe schrieb:
Was ist denn
HTML_file? Kommt die Klasse von dir oder ist sie Bestandteil einer Bibliothek. Im ersten Fall musst du die entsprechenden .h/.cpp Dateien mit in dein Projekt aufnehmen,wie nehm ich den die .cpp mit auf?
im zweiten musst du deinem Linker mitteilen, dass er beim Linken die Bibliothek mitlinken soll.
bitte was?
versteh ich nicht
-
ach so und html_file is meine klasse hab ich im header drin
-
Ist die komplette Klasse im Header oder ist sie verteilt auf Header und cpp-Datei?
-
_matze schrieb:
Ist die komplette Klasse im Header oder ist sie verteilt auf Header und cpp-Datei?
verteilt
wenn ich nun in meine cpumain.cpp #include "cpu.cpp" rein schreibe kommt dieser fehler hier:
/home/praktikant/kernelstat/cpu2.cpp: In Funktion »void add_verbatim(std::istream&)«:
/home/praktikant/kernelstat/cpu2.cpp:8:5: Fehler: »data« wurde in diesem Gültigkeitsbereich nicht definiert
/home/praktikant/kernelstat/cpu2.cpp: In Funktion »void add_text(const char*)«:
-
also wenn ich das richtig entnommen habe hier:
http://www.c-plusplus.net/forum/301348-fulldann fehlt mir da was in der cmakelist.txt richtig?
-
*.cpp werden nicht includiert.
übersetzte die beiden cpp-dateien in einem g++ aufruf.informier dich über übersetzungseinheiten, beispielsweise bei volkard
(ignoriere hier jedoch das void main... nicht standard)
-
Enno schrieb:
dann fehlt mir da was in der cmakelist.txt richtig?
Was steht denn in deiner cmakelist.txt? Meine Kristallkugel ist gerade in der Werkstatt.
-
cmake_minimum_required(VERSION 2.8.7) project(CPU) set(CPU_VERSION_MAJOR 1) set(CPU_VERSION_MINOR 0) add_executable(CPU cpumain.cpp)und meine header:
#ifndef CPU_H #define CPU_H class HTML_File { private: std::string data; public: void add_verbatim(std::istream& in); void add_text(const char *in); std::string to_string(); }; #endif
-
Enno schrieb:
add_executable(CPU cpumain.cpp)
Was ist denn cpumain.cpp? Die hast du vorher nicht erwähnt.
Wie auch immer, in diese runde Klammer müssen alle .cpp-Dateien, die zum Programm gehören.
-
Da fehlt übrigens ein #include <string> in deinem Header über der Klassendefinition.
Schau mal in ein Grundlagenbuch über C++ deiner Wahl nach, wie das mit der getrennten Übersetzung und der ODR (one definition rule) funktioniert.
-
ups entschuldige
ich hab meine datei eben umbenannt zu besseren übersichthab nun:
cpumain.cpp
cpu.h
cpu.cppd.h. nun muss ich die cpu.cpp auch da mit rein machen? also
add_executable(CPU cpumain.cpp, cpu.cpp)???
-
Enno schrieb:
d.h. nun muss ich die cpu.cpp auch da mit rein machen? also
add_executable(CPU cpumain.cpp, cpu.cpp)???Ja sicher! ...wobei da glaub'ich kein Komma hinkommt.
-
yeah das hat geholfen

kommt das nächste problem:
/home/praktikant/kernelstat/cpu.cpp: In Funktion »void add_verbatim(std::istream&)«: /home/praktikant/kernelstat/cpu.cpp:8:5: Fehler: »data« wurde in diesem Gültigkeitsbereich nicht definierthab auch schon probiert das std::string data; in public mit rein zu hauen geht auch nicht
class HTML_File { private: std::string data; public: void add_verbatim(std::istream& in); void add_text(const char *in); std::string to_string(); };#include <fstream> #include <iostream> #include <ostream> #include <string> #include "cpu.h" void add_verbatim(std::istream& in) { data += "<pre>"; char c; while(in.get(c)) if (c == '<') data += "<"; else if (c == '>') data += ">"; else data += c; data += "</pre>"; } void add_text(const char *in) { data += in; } std::string to_string(){ std::string out = "<!DOCTYPE html>\n<html><body>" + data + "</body></html>\n"; return out; }oder muss ich hier nochmal
char dataeinfügen?
-
void HTML_File::add_verbatim(std::istream& in) { ...
-
wow danke

nur wie mach ich es heir mit?
std::string to_string(){schreib ich HTML_File davor bekomm ich ein fehler
-
ok bin dumm xD hat sich erledigt