Methode bereits definiert
-
So:
#include "help.h" #include <iostream> #include <fstream> #include <string> #include <vector> //#include <algorithm> #define themendatei "H:\\Projekt Systementwicklung\\Quellcode\\Hilfe\\Inhalte.txt" using namespace std; #ifndef _HELP_CPP #define _HELP_CPP // legt eine neue Hilfedatei an void Help::newHelpfile(){ string dateiname; char text[100]; bool beenden=false; cout << endl << "neues Thema bzw. Dateiname (Bsp: neues_Thema5): "; cin >> dateiname; // Pflege der Themenübersicht int zeilen=0; string line; ifstream is(themendatei); ofstream temp_os("tempHilfe.txt"); while (!is.eof()) { zeilen++; getline(is, line); temp_os << line << endl; } temp_os << "[" << zeilen+1 << "] " << dateiname; is.close(); remove(themendatei); //alte Themendatei löschen temp_os.close(); rename("tempHilfe.txt", themendatei); //neue umbenennen // neue Hilfedatei anlegen dateiname=dateiname + ".txt"; ofstream os(dateiname.c_str()); cout << "Und nun zeilenweise Ihr Hilfetext: " << endl; while (beenden==false){ cin.sync(); cin.getline(text, 100); if (text[0]=='Q' && text[1]=='U' && text[2]=='I' && text[3]=='T'){ beenden=true; cout << endl; }else{ os << text << endl; } } } // löscht eine Hilfedatei void Help::deleteHelpfile(){ int themennr; int anzlines=0; int themenindex=1; string line; string DatatoDelete; ifstream is(themendatei); ofstream os("tempHilfe1.txt"); Help::showContent(); cout << "Nummer des zu entfernenden Themas: "; cin >> themennr; while (!is.eof()){ getline(is, line); if (anzlines+1!=themennr){ os << "[" << themenindex << "] " << line.substr(4, 80); if (!is.eof()){ os << endl; } themenindex++; }else{ DatatoDelete=line.substr(4, 80); cin.sync(); } anzlines++; } if (themennr>anzlines){ os.close(); remove("tempHilfe1.txt"); }else{ DatatoDelete=DatatoDelete + ".txt"; remove(DatatoDelete.c_str()); //Hilfedatei löschen is.close(); remove("Inhalte.txt"); //alte Themendatei löschen os.close(); rename("tempHilfe1.txt", themendatei); //neue umbenennen } } // gibt eine Hilfedatei auf dem Bildschirm aus void Help::selectHelpfile(){ ifstream is(themendatei); string line; int themennr; int lines=showContent(); cout << "Nummer des anzuzeigenden Themas: "; cin >> themennr; if (themennr<=lines){ for (int i=1; i<=themennr; i++){ getline(is, line); } line = line.substr(4, 80) + ".txt"; ifstream show(line.c_str()); while (!show.eof()) { getline(show, line); cout << line << endl; } }else{ cout << "Das Thema existiert nicht." << endl; } } // durchsucht alle Hilfetexte nach einem Suchwort void Help::searchWord(){ ifstream is(themendatei); string wort; string helptopic; string helptext; bool wordfound=false; cout << "Ihr Suchwort: "; cin >> wort; while (!is.eof()) { getline(is, helptopic); if (helptopic.find(wort)!=string::npos){ cout << "\t" << helptopic << endl; wordfound=true; }else{ string dataname=helptopic.substr(4, 80) + ".txt"; ifstream helpdata(dataname.c_str()); while (!helpdata.eof()){ getline(helpdata, helptext); if (helptext.find(wort)!=string::npos){ cout << "\t" << helptopic << endl; wordfound=true; } } helpdata.close(); } } is.close(); if (!wordfound){ cout << "Wort nicht enthalten." << endl; } cout << endl; } // Konstruktor der Klasse Help - legt ein Helpobjekt an Help::Help(void){} // Detruktor der Klasse Help - löscht Helpobjekt und gibt Speicher frei Help::~Help(void){} // gibt alle verfügbaren Hilfethemen auf dem Bildschirm aus int Help::showContent(){ int anzlines=0; string line; ifstream is(themendatei); while (!is.eof()) { anzlines++; getline(is, line); cout << "\t" << line << endl; } cout << endl; return anzlines; } // stellt ein Menu zur Verwaltung der Hilfedateien zur Verfügung void Help::menu(){ char auswahl; while (auswahl!='e'){ cout << "Bitte waehlen Sie die Aktion aus:" << endl; cout << "\t(s)how\t\tzur Anzeige aller Hilfethemen" << endl; cout << "\t(f)ile\t\tzur Anzeige einer Hilfedatei" << endl; cout << "\t(n)ew\t\tzur Eingabe eines neuen Hilfethemas" << endl; cout << "\t(d)elete\tzum Entfernen eines Hilfethemas" << endl; cout << "\t(e)nd\t\tzum Beenden" << endl; cout << "Ihre Auswahl (mit <Enter> bestaetigen): "; cin >> auswahl; switch(auswahl){ case 's': Help::showContent(); break; case 'f': Help::selectHelpfile(); break; case 'n': Help::newHelpfile(); break; case 'd': Help::deleteHelpfile(); break; case 'e': break; default: cout << "Falscheingabe !!!" << endl; } } } /* void pruefenEingabe(string suchwort){ } void helpFunction(){ } */ #endif
-
Und dieselben Methoden hast du auch in help.cpp definiert? Dann ist es doch kein Wunder, dass sich der Linker beschwert, wenn er beide zusammenfügen soll.
-
Wir begrüßen Betty
-
Wir begrüßen Betty
-
helptest.cpp sieht schlicht so aus:
#include "help.h" void main(){ Help meine_Hilfe; meine_Hilfe.menu(); }
Und help.h includiert ganz am Ende help.cpp
-
Ich begrüße euch alle zurück. Bei dem Quellcode wird mir allerdings ganz
-
Gordon schrieb:
Und help.h includiert ganz am Ende help.cpp
Das ist der Fehler.
Dadurch hast du den Inhalt von help.cpp in help.h, und damit auch in helptest.cpp, also hast du alle Methoden doppelt.
Wozu überhaupt? Ist doch komplett sinnlos.
-
Wollte damit eigentlich erreichen, dass der Nutzer nur help.cpp includieren muss, aber da hab ich mich wohl selbst ans Bein ...
Danke
-
Gordon schrieb:
Wollte damit eigentlich erreichen, dass der Nutzer nur help.cpp includieren muss,
.cpp-Dateien sollte man niemals includen.
aber da hab ich mich wohl selbst ans Bein ...
-
Das war schon wieder ein sinnloser Beitrag, Du merkst ich dreh langsam durch. Auf jeden Fall hast Du Recht und das war totaler Humbuk