[GELÖST] Mal wieder Probleme mit Header
-
Hallo!
Mal wieder bekomm ich es einfach nicht auf die Reihe und weiß nicht, was ich falsch mache. Ich habe einen Batzen Funktionen, den ich wieder in eine Headerdatei auslagern möchte und bekomme nun Fehlermeldungen beim Header, die ich nicht verstehe://vigenere.h #ifndef VIGENERE_H_INCLUDED #define VIGENERE_H_INCLUDED #include <string> #include <vector> void cryptkey (string key, vector<int> & intkey); // Konvertiert Schlüssel in Zahlenfolge um Verschiebung zu erleichtern // key: Schluessel, intkey: Vektor in dem der Schluessel als Zahlenfolge abgespeichert werden soll void crypt( string sourcefile, string key, const string savefile = "Cryptext.txt", bool decrypt = 0 ); // Chiffriert den Text // sourcefile: Dateiname des Klartextes, key: Schluessel, savefile: Dateiname des Chiffrats (Default: Cryptext.txt) // decrypt: andere Ausgabe beim Dechiffrieren double friedmann (string & text, char language = 'D'); // Schätzt Schlüssellänge nach Friedmann // text: Chiffrat als String, language: Sprache des Textes (Default: 'D', deutsch) void decrypt (string sourcefile, char language = 'D'); // sourcefile: Mit Vigenere verschluesselter Text, language: Sprache des Klartextes void caesar( string & text, size_t keylength); // Zerlegt den Text in Streifen und verschiebt diese nach Ermittlung des 'E's // text: Chiffrat als String (keine Leer- oder Satzzeichen erlaubt), keylength: Schluessellaenge void kasiki(string & text, size_t len, vector<int> & distances); // text: Chiffrat als String (keine Leer- oder Satzzeichen erlaubt), len: Laenge der gesuchten Zeichenketten // distances: Vektor, der alle Abstände speichert und für eine automatische Wahl des Schluessels (optional) sortiert wird int min(vector<int> & sort) ; #endif // VIGENERE_H_INCLUDED//main.cpp #include <iostream> #include <string> #include <fstream> #include <vector> #include <ctype.h> // isalpha() #include <cstdlib> // exit() #include "vigenere.h" int main() { char ch; string filename, schluessel; do { std::cout << "Chiffrieren (c) oder Dechiffrieren (d) (Ende mit 'e')? "; std::cin >> ch; switch(ch) { case 'c': std::cout << "\nKlartextfile: "; std::cin >> filename; std::cout << "\nSchluesselwort (keine Ziffern oder Satzzeichen): "; std::cin >> schluessel; crypt(filename, schluessel); break; case 'd': std::cout << "\nSchluesseltextfile: "; std::cin >> filename; decrypt(filename); break; case 'e': break; default: std::cout << "Ungueltige Eingabe\n\n"; } }while(ch != 'e'); return 0; }Ich wusste jetzt nicht, ob die Funktionen an sich relevant sind - wollte nur den Rahmen erstmal nicht sprengen.
Ich bekomme folgende Fehlermeldung im Header:
"error: variable or field 'cryptkey' declared void" (Was?!) (8)
"error: 'string' was not declared in this scope" (Ich habe doch String inkludiert?) (8)
und "error: expected primary expression before 'const' (10).Danke danke mal wieder für eure Hilfe!
-
Also der String Fehler ist sicher davon, dass du den Namesraum nicht angegeben hast (und mach da jetzt kein using namespace hin, sondern qualifiziere explizit mit std:: !).
Für die anderen beiden Fehler musst du genauere Infos geben (Zeile).
Möglicherweise gibt es Probleme mit den Namen "min", weil das ein Konflikt geben kann mit einem Makro, dass min heisst. Benenn die Funktion ggf. mal um.
btw:
Wo sind die Implementierungen der Funktionen?
-
Hi drakon. danke für die Antwort. Die Zeilen habe ich nun oben mit angefügt.
Wo soll ich das std:: anfügen?Hier meine Funktionen:
//vigenere.cpp [der übersicht wegen gelöscht - tat nichts zur Sache.]
-
Tonikum schrieb:
Hi drakon. danke für die Antwort. Die Zeilen habe ich nun oben mit angefügt.
Wo soll ich das std:: anfügen?void cryptkey (std::string key, std::vector<int> & intkey);Das sollte eigentlich alle Probleme beheben (wenn du das für alle string und vector so machst).
-
Ah super, drakon!
Dankeschön, jetzt klappt alles.
Ich wusste nicht, wovor ich das std:: alles machen musste... und die Fehlermeldungen wusste ich nicht zun interpretieren.
Danke!
-
Ja. Die Fehlermeldunge ist nicht so eindeutig.
Ist dir jetzt klar, wofür das
std::da ist und wann du es hinschreiben musst?