Problem bei meinem HTML Programm (Komische Fehler)
-
Hey Leute.
Ich schreibe momentan ein Programm das ausführbare HTML Daten erstellt.
Bloß tauchen folegnde seltsame Fehler auf:In file included from Main.cpp
field `HTML' has incomplete type
In function `int main()':
`setZustand' has not been declared
request for member of non-aggregate type before '(' token
`Schreibe' has not been declared
jump to case label
crosses initialization of `std::string MyZustand'
usw. -.-
Was habe ich da falsch gemacht?
Naja ich geb mal den Code durch, da man beim sehen besser sieht wo der fehler ist^^// Main.cpp #include <string> #include <iostream> #include "Builder.hpp" using namespace std; int main() { int Aktion; string Pfad; bool Ende; cout << "|>----------------------------------------------------------------------------<|" << endl; cout << "|>-----------------------------HyperTextMaker---------------------------------<|" << endl; cout << "|>----------------------------------------------------------------------------<|" << endl; cout << "|>> Zuöffnene Datei eingeben (Muss im selben Verzeichnis sein): "; cin >> Pfad; cout << endl; Builder* Datei = new Builder(Pfad); cout << "|>----------------------------------------------------------------------------<|" << endl; cout << "|> 1.) Text einfügen." << endl; cout << "|> 2.) Bild einfügen." << endl; cout << "|> 3.) Hintergrundfarbe setzen." << endl; cout << "|> 4.) Beenden!" << endl; cout << "|>----------------------------------------------------------------------------<|" << endl; do { cout << "|>> Menüpunkt auswählen: "; cin >> Aktion; switch (Aktion) { case 1: string MyText; string MyZustand; cout << "|>> Welcher Zustand? (Fett, Kursiv o. Unterstrichen): "; cin >> MyZustand; Datei.setZustand(MyZustand); cout << "|>> Bitte Text eingeben: " << endl; cin >> MyText; Datei.Schreibe(MyText); Datei.setZustand_FALSE(); break; case 2: cout << "Nicht da." << endl; break; case 3: string HintergrundFarbe; cout << "|>> Bitte Hintergrundfarbe eingeben: "; cin >> HintergrundFarbe; Datei.setHintergrund(HintergrundFarbe); break; case 4: Ende = true; delete Datei; break; default: cout << "Ungültige Eingabe!" << endl; break; } } while (Ende != true); system("PAUSE"); }// Builder.hpp /*-----> Informationen <-----*\ | Autor : Michael P | | Projektname : Builder (HTML)| |>---------------------------<| |>Versionsstatus: v0.5 | \*****************************/ #ifndef BUILDER_HPP_ #define BUILDER_HPP_ class Builder { private: // true(AN), false(AUS). bool Fett; bool Kursiv; bool Unterstrichen; std::fstream HTML; // HTML Datei. public: //-----> Konstruktoren <-----// Builder(std::string Datei); //-----> Destruktoren <-----// ~Builder(); //-----> Getter <-----// void getHtmlCode() const; //-----> Prüfer <-----// bool isLeer(); //-----> Setter <-----// void setZustand(std::string Zustand); void setZustand_FALSE(); void setSchriftart(); void setSchriftgrad(); void setHintergrund(std::string Farbe); //-----> Andere <-----// void Schreibe(std::string Text); }; #endif// Builder.cpp #include <string> #include <fstream> #include <iostream> #include "Builder.hpp" using namespace std; //----------> Konstruktoren! <----------// Builder::Builder(string Datei) { HTML.open(Datei); HTML << "<html>" << endl; HTML << "<body>" << endl; } //----------> Destruktoren! <----------// Builder::~Builder() { HTML << "</body>" << endl; HTML << "</html>" << endl; HTML.close(); } //----------> Getter! <----------// //----------> Prüfer! <----------// bool Builder::isLeer() { } //----------> Setter! <----------// void Builder::setZustand(string Zustand) { if (Zustand=="Fett") {Fett = true;} else if (Zustand=="Kursiv") {Kursiv = true;} else if (Zustand=="Unterstrichen") {Unterstrichen = true;} } void Builder::setZustand_FALSE() { Fett = false; Kursiv = false; Unterstrichen = false; } void Builder::setSchriftart() { } void Builder::setSchriftgrad() { } void Builder::setHintergrund(string Farbe) { if (Farbe == "Schwarz") {HTML << "<body style=\"background-color: #000000;\">" << endl;} else if (Farbe == "Dunkel Grün") {HTML << "<body style=\"background-color: #008000;\">" << endl;} else if (Farbe == "Oliev") {HTML << "<body style=\"background-color: #808000;\">" << endl;} else if (Farbe == "Dunkel Blau") {HTML << "<body style=\"background-color: #000080;\">" << endl;} else if (Farbe == "Lila") {HTML << "<body style=\"background-color: #800080;\">" << endl;} else if (Farbe == "Hellgrün") {HTML << "<body style=\"background-color: #008080;\">" << endl;} else if (Farbe == "Grau") {HTML << "<body style=\"background-color: #808080;\">" << endl;} else if (Farbe == "Silber") {HTML << "<body style=\"background-color: #c0c0c0;\">" << endl;} else if (Farbe == "Rot") {HTML << "<body style=\"background-color: #FF0000;\">" << endl;} else if (Farbe == "Grün") {HTML << "<body style=\"background-color: #00FF00;\">" << endl;} else if (Farbe == "Gelb") {HTML << "<body style=\"background-color: #FFFF00;\">" << endl;} else if (Farbe == "Blau") {HTML << "<body style=\"background-color: #0000FF;\">" << endl;} else if (Farbe == "Pink") {HTML << "<body style=\"background-color: #FF00FF;\">" << endl;} else if (Farbe == "Hellblau") {HTML << "<body style=\"background-color: #00FFFF;\">" << endl;} else if (Farbe == "Weiß") {HTML << "<body style=\"background-color: #FFFFFF;\">" << endl;} else {cout << "Ungültige Eingabe!" << endl;} } //----------> Andere! <----------// void Builder::Schreibe(string Text) { if (Fett == true) {HTML << "<b>" << Text << "</b>" << endl;} else if (Kursiv == true) {HTML << "<i>" << Text << "</i>" << endl;} else if (Unterstrichen == true) {HTML << "<u>" << Text << "</u>" << endl;} else {HTML << Text << endl;} } //---------->> ENDE! <<----------//Ich finde die Fehler nicht, er meint ja als die funktion der klasse wären nicht decladiert und in dem case will er das string auch irgentwie nicht...
Mfg Wikinger75!
-
Hallo, habs mal gerade versucht zu kompilieren und eigentlich sind die Fehler relativ leicht mit der Fehlerangabe des Compilers zu finden:
in "Builder.hpp" fehlt
#include <fstream>dann: open nimmt keinen string, sonder const char*
Builder::Builder(string Datei) { HTML.open(Datei.c_str()); HTML << "<html>" << endl; HTML << "<body>" << endl; }bool Builder::isLeer() { // hier muss ein bool zurückgegeben werden! }Und so geht man dann Fehler für Fehler durch bis keiner mehr übrig bleibt.
Ich denke mal dein Compiler spuckt sogar noch Zeilennummern der Fehler aus, was es dir dann noch einfacher macht.
Den Rest schaffst Du bestimmt selbst :p
-
Ich denke mal dein Compiler spuckt sogar noch Zeilennummern der Fehler aus, was es dir dann noch einfacher macht.
I.d.R springt er sogar in die Zeile, wenn man einen Doppelklick auf die Fehlermeldung macht.
@Wikinger75:
Kleiner Tipp:
Solche if/elseif Kaskaden kannst du dir sparen und z.B mit einer map lösen, wo du einfach die Farben einträgst und dann in einer Schleife ausgeben kannst. Dann speicherst du da einfach 2 strings drin und kannst dir die Redundanz der Ausgabe sparen.
-
gut
1.) Warum muss das ein Char sein?Hab festegstellt, dass (xD)
1.) Kein wunder das er meinte das es die funktion nicht gibt, da der zeiger nur Zeigerfunktionen und keine normalen funktion etgegen nimmt.void func(); // Normal void* func(); // Zeigerfunc...Daher hab ich aus
Builder* Datei = new Builder(Pfad);Builder Datei(Pfad);gemacht.
Und im case kann ich keine variablen definieren, warum?
-
Wikinger75 schrieb:
Warum muss das ein Char sein?
Die Schnittstelle ist nunmal so definiert, dass sie einen
char*(keinenchar) nimmt. Im neuen Standard soll sich das ändern.Wikinger75 schrieb:
Und im case kann ich keine variablen definieren, warum?
switch-caseist diesbezüglich etwas merkwürdig. Skalare Typen können beispielsweise definiert werden. Du kannst das umgehen, indem du einfach einen lokalen Block anlegst (durch die geschweiften Klammern).
-
Ah gut Dann müsste das in etwas so ausehen?
switch (VAR) { case 1: { string 1; string2; } // funktionen... break; default: break; }Wan kommt der neue standart? Gibs irgentso ne news seite?
-
Wikinger75 schrieb:
Wan kommt der neue stan****?
Meinst du eine neue Standarte? Da ist mir nix bekannt...

-
Ja genau den mein ich den neuen Standarte.

-
Nein, ich meinte, die Schnittstelle von
std::fstreamwürde erweitert, sodass sie auch mitstd::stringkompatibel ist. Amswitchändert sich soweit ich weiss nichts.Der neue C++-Standard sollte eigentlich 2009 erscheinen, aber ganz genau weiss das niemand...

-
Ahso ja denn ^^
Ma abwarten.THX Leuts
.
-
Ein weiterer für mich unbegründeter Fehler ist, wenn man eine ungültige eingabe macht, dieser zum default operator springt und sich in einer endlos schleife verhädert, wie ist dies möglich?
Wie kann ich dieses Problm beseitigen?
-
Wie sieht denn der dazugehörige Code aus (nur der relevante Teil)?
defaultist im Übrigen kein Operator, sondern eine Sprungmarke.
-
Das ist es ja der fehler pasier werähnd des programmlaufs, nicht zur compilerzeit.
Wenn ein ungültiger wert eingegeben wird, dann geht es in eine endlose-schleife.
-
Ja, ich hatte aber nach dem Code gefragt.
-
Der hat sich nicht verändert...
jedoch wenn ich richtige liege müsste der fehler hier sein, da er ja dort in die endlos schleife springt oder?
default: cout << "Ungültige Eingabe!" << endl; break;
-
Leer mal den Eingabepuffer. Bevor du auf die Eingabe wartest..
-
drakon schrieb:
Leer mal den Eingabepuffer.
Leichter gesagt als getan...

Hier, hier, hier und hier wurde neben den 314 anderen Threads das Thema besprochen. Aber vorweg: Eine wirklich saubere Möglichkeit gibt es dafür nicht.
-
Nexus schrieb:
drakon schrieb:
Leer mal den Eingabepuffer.
Leichter gesagt als getan...

Ich weiss, aber ich war zu faul alles herauszusuchen..

-
ehm würde ich mit clear nicht den inhalt der datei löschen?^^
-
Wikinger75 schrieb:
ehm würde ich mit clear nicht den inhalt der datei löschen?^^
Nein.
-
ähm ne dadran hat e snicht gelegen, ich hab die problematik mal mehr unter die luppe genommne.
Wenn ich eine ungültige zahl beim menü eingebe, dann läuft alles normal, doch wenn bei der eingabe ein string, eine zeichenkette eingegeben wird, erst das geht er in die endlos schleife.Logisch da ja ein int erwartet wird, wie knan ich dieses problem lösen?
Mit Exceptions?