Geht mit g++ aber nicht mit dem VC++



  • Hallo zusammen!

    Folgender Code aus "Intensivkurs C++/pearson studium/2003" (s:71):

    #include <algorithm>
    #include <iomanip>
    #include <ios>
    #include <iostream>
    #include <string>
    #include <vector>

    using std::cin;
    using std::cout;
    using std::endl;
    using std::setprecision;
    using std::sort;
    using std::string;
    using std::streamsize;
    using std::vector;

    int main(){

    cout << "Bitte geben Sie Ihren Vornamen ein: ";
    string name;
    cin >> name;
    cout << "Hallo, " << name << "!" << endl;

    cout << "Bitte geben Sie die Vorpruefung-"
    << "und Diplompruefungsnote ein: ";
    double vor,diplom;
    cin >> vor >> diplom;

    cout << "Bitte alle Hausarbeitsnoten, "
    << "gefolgt vom Datei-Ende-Zeichen: ";

    typedef vector<double>::size_type vec_sz;
    vector<double> hausarbeiten;
    double x;

    while(cin >> x)
    hausarbeiten.push_back(x);

    vec_sz groesse = hausarbeiten.size();

    if(groesse==0){
    cout << "Sie muessen die Noten eingeben. "
    "Bitte versuchen Sie es noch einmal."
    << endl;
    return 1;
    }

    sort(hausarbeiten.begin(), hausarbeiten.end());

    vec_sz mitte = groesse/2;
    double median;
    median = groesse%2==0
    ?(hausarbeiten[mitte]+hausarbeiten[mitte-1])/2
    : hausarbeiten[mitte];

    streamsize genau = cout.precision();

    cout << "Ihre Endnote ist " << setprecision(3)
    << 0.2*vor+0.4*diplom+0.4*median
    << setprecision(genau) << endl;
    return 0;
    }

    Folgende Fehlermeldung, VC++6.0, Winxp:
    --------------------Configuration: two - Win32 Debug--------------------
    Compiling...
    two.cpp
    E:\My Documents\scfiles\two.cpp(32) : error C2653: 'vector<double,class std::allocator<double> >' : is not a class or namespace name
    E:\My Documents\scfiles\two.cpp(32) : error C2146: syntax error : missing ';' before identifier 'vec_sz'
    E:\My Documents\scfiles\two.cpp(32) : error C2065: 'vec_sz' : undeclared identifier
    E:\My Documents\scfiles\two.cpp(39) : error C2146: syntax error : missing ';' before identifier 'groesse'
    E:\My Documents\scfiles\two.cpp(39) : error C2065: 'groesse' : undeclared identifier
    E:\My Documents\scfiles\two.cpp(50) : error C2146: syntax error : missing ';' before identifier 'mitte'
    E:\My Documents\scfiles\two.cpp(50) : error C2065: 'mitte' : undeclared identifier
    Error executing cl.exe.

    two.exe - 7 error(s), 0 warning(s)

    Stimmt etwas mit den Einstellungen nicht?

    Danke!

    lnxnt



  • Hallo,

    es ist alles ok, nur ist VC dafür bekannt, einige "Schwächen" in der Unterstützung bestimmter Konstrukte zu haben. In diesem Fall hilft z.B. folgendes anstelle der Problem-Zeile (nur std ergänzt):

    typedef std::vector<double>::size_type vec_sz;
    

    Du hast zwar oben:

    using std::vector;
    

    aber:

    Wenn template-bezogene Dinge Compiler-Fehler bringen, die andere Compiler ohne Probleme akzeptieren, darfst du dich beim VC-Compiler nicht wundern, sondern einen workaround bauen. Das ist hier noch einfach, wird aber je nach Komplexität der auf VC zum Laufen zu bringenden Template-Konstrukte immer aufwändiger (wenn man mal eine (Template-)Klassen-Bibliothek auf VC portieren muß, dann wird es schon lustig und mühevoll). Aber wenn du auch den g++ benutzt, dann mußt du dir die Mühe ja nicht machen...

    Mfg


Anmelden zum Antworten