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