#1 20. November 2009 Dev-C++ Compiler Problem Hi Leute, das hier ist meine Version zu der Umwandlung von römischen in arabische Zahlen: main.cpp Code: #include <cstdlib> #include <conio.h> #include <iostream> #include <string> #include <algorithm> #include "funktionen.h" using namespace std; int main() { string sRoemischeZahl = ""; int dArabischeZahl = 0; cout << "Geben Sie bitte Ihre roemische Zahl ohne Leerzeichen ein!\n" << "Erlaubt sind folgende Ziffern:\n" << "I - V - X - L - C - D - M\n" << "\n" << "Eingabe: "; cin >> sRoemischeZahl; toUpper (&sRoemischeZahl); int i = 0; while (i < sRoemischeZahl.length()) { if (sRoemischeZahl[i] == 'I' && sRoemischeZahl[i+1] != 'V' && sRoemischeZahl[i+1] != 'X') { dArabischeZahl += 1; i++; } else if (sRoemischeZahl[i] == 'I' && sRoemischeZahl[i+1] == 'V') { dArabischeZahl += 4; i+=2; } else if (sRoemischeZahl[i] == 'V') { dArabischeZahl += 5; i++; } else if (sRoemischeZahl[i] == 'I' && sRoemischeZahl[i+1] == 'X') { dArabischeZahl += 9; i+=2; } else if (sRoemischeZahl[i] == 'X' && sRoemischeZahl[i+1] != 'L' && sRoemischeZahl[i+1] != 'C') { dArabischeZahl += 10; i++; } else if (sRoemischeZahl[i] == 'X' && sRoemischeZahl[i+1] == 'L') { dArabischeZahl += 40; i+=2; } else if (sRoemischeZahl[i] == 'L') { dArabischeZahl += 50; i++; } else if (sRoemischeZahl[i] == 'X' && sRoemischeZahl[i+1] == 'C') { dArabischeZahl += 90; i+=2; } else if (sRoemischeZahl[i] == 'C' && sRoemischeZahl[i+1] != 'D' && sRoemischeZahl[i+1] != 'M') { dArabischeZahl += 100; i++; } else if (sRoemischeZahl[i] == 'C' && sRoemischeZahl[i+1] == 'D') { dArabischeZahl += 400; i+=2; } else if (sRoemischeZahl[i] == 'D') { dArabischeZahl += 500; i++; } else if (sRoemischeZahl[i] == 'C' && sRoemischeZahl[i+1] == 'M') { dArabischeZahl += 900; i+=2; } else if (sRoemischeZahl[i] == 'M') { dArabischeZahl += 1000; i++; } } cout << "Ihre roemische Zahl als arabische Zahl ergibt: " << dArabischeZahl << endl; getch(); return 0; } funktionen.h Code: #ifndef _FUNKTIONEN_H #define _FUNKTIONEN_H #include <cstdlib> #include <conio.h> #include <iostream> #include <string> #include <algorithm> using namespace std; int toUpper (string * name) { transform(name->begin(), // Falls der String Kleinbuchstaben enthält, name->end(), // werden diese hier in Großbuchstaben name->begin(), // konvertiert ::toupper); return 0; } #endif Vorneweg: Ich benutzer den Dev-C++ sehr gerne, leider spuckt er mir diese Fehlermeldung aus: Code: 13 main.cpp In file included from main.cpp funktionen.h In function `int toUpper(std::string*)': 14 funktionen.h `begin' has not been declared 14 funktionen.h request for member of non-aggregate type before '(' token Und was geht dann weiter mit "end has not been declared" etc. Das Komische ist: Im Visual Studio funktioniert es :/ Weiß jemand, woran das liegt? + Multi-Zitat Zitieren
#2 20. November 2009 AW: Dev-C++ Compiler Problem du vermischt c mit c++ bei mir klappt dein programm (bis auf ein paar unnötige header die ich entfernt hab) ohne probleme kompiliert mit minGW g++ //ps: das is meine verbesserte version meines c++ codes Spoiler Code: #include <iostream> #include <fstream> #include <string> static inline void pause() { std::cout << "\n\nbeenden mit beliebiger taste..."; std::cin.clear(); fflush(stdin); std::cin.get(); } static inline unsigned int rchr2int(char *c) { switch(tolower(*c)) { case 'i': return 1; case 'v': return 5; case 'x': return 10; case 'l': return 50; case 'c': return 100; case 'd': return 500; case 'm': return 1000; default: return 0; } } int main(int argc, char *argv[]) { std::string num; if(argc == 1) { std::cout << "bitte zahl eingeben: "; std::cin >> num; } else num = argv[1]; unsigned int sum = 0, item, prev = 0; for(unsigned int i = 0, to = num.length(); i < to; ++i) { if(0 == (item = rchr2int(&num[i]))) { std::cout << "invalides zeichen in zahl gefunden: \"" << num[i] << "\""; pause(); return 1; } sum += item; if(prev > 0 && item > prev) sum -= prev * 2; prev = item; } std::cout << "dezimalwert von \"" << num << "\" ist " << sum; pause(); return 0; } //eof + Multi-Zitat Zitieren
#3 23. November 2009 AW: Dev-C++ Compiler Problem Daran kann das liegen? Kann ich mir irgendwie nicht vorstellen... Ich habe den "Konvertierungsvorgang" jetzt ebenfalls in eine Funktion in die Headerdatei ausgelagert, und es funktioniert?! Wie ist denn so der Standard eigentlich? Wo und wie schreibt man Funktionen hin? Deklariert man sie nur und definiert sie woanders? Danke schonmal + Multi-Zitat Zitieren
#4 23. November 2009 AW: Dev-C++ Compiler Problem standard wär eigl. prototpen, typedef's, klassen etc. in header, rest in .cpp + Multi-Zitat Zitieren
#5 23. November 2009 AW: Dev-C++ Compiler Problem Sprich ich deklariere meine Funktion oben in der cpp und definiere sie unter der main? EDIT: Noch 'ne Frage: Gibt es eine Ausnahme bei Zeigern auf Char-Arrays? Wenn ich in meinem Code jetzt den String mit einem char-Array austauschen will, dann kommt im Compiler die Fehlermeldung "cannot convert char to string" oder so ähnlich. Habe das wie folgt geändert: funktionen.h Code: int toUpper (char *name) { transform(name->begin(), // Falls der String Kleinbuchstaben enthält, name->end(), // werden diese hier in Großbuchstaben name->begin(), // konvertiert ::toupper); return 0; } main.cpp Code: int main() { char sRoemischeZahl[] = ""; cout << "Geben Sie bitte Ihre roemische Zahl ohne Leerzeichen ein!\n" << "Erlaubt sind folgende Ziffern:\n" << "I - V - X - L - C - D - M\n" << "\n" << "Eingabe: "; cin >> sRoemischeZahl; toUpper(&sRoemischeZahl); getch(); return 0; } + Multi-Zitat Zitieren