[C/C++] Dev-C++ Compiler Problem

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Characticl D, 20. November 2009 .

Schlagworte:
  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?
     
  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
    
    
     
  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
     
  4. 23. November 2009
    AW: Dev-C++ Compiler Problem

    standard wär eigl. prototpen, typedef's, klassen etc. in header, rest in .cpp
     
  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;
    }
    
     
  6. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.