[C++] MS Visual Studio 2005 / g++ von MinGW

07/10/2009 - 12:40 von Robert Hartmann | Report spam
Hallo zusammen,

ich habe mir eine Klasse geschrieben,
die ohne Probleme im g++ von MinGW
kompiliert.

Nun wollte ich probieren, ob der Code
auch vom MS Visual Studio 2005 kompiliert
wird.

Da ich meines Wissens nach keine speziellen
GCC-Sachen benutzt habe und auch keine
außergewöhnlichen Bibliotheken, sondern nur
C++ mit STL, hatte ich erwartet, dass Visual Studio
den Code akzeptiert.

Leider ist diese Erwartung überhaupt nicht
erfüllt worden.

Ich erhalte einige Fehlermeldungen,
zu Problem, die ich im Code nicht erkenne,
und deren Lösung mir nicht deutlich wird:


1>\bitfield.cpp(1163) : error C2143: syntax error : missing ';' before '&'
1>\bitfield.cpp(1163) : error C2761: '{ctor}' : member function
redeclaration not allowed
1>\bitfield.cpp(1163) : error C4430: missing type specifier - int
assumed. Note: C++ does not support default-int
1

\bitfield.cpp(1190) : error C2440: 'return' : cannot convert from


'Bitfield' to 'int'
1> No user-defined-conversion operator available that can perform
this conversion, or the operator cannot be called
1>\bitfield.cpp(1191) : error C2617: 'operator <<' : inconsistent return
statement



Dabei bezieht sich der obige erste Fehler und der obige letzte Fehler
jeweils auf die erste und letzte Zeile dieses Codes:


class Bitfield{
//[...]
friend std::ostream& operator<<(std::ostream& s, const Bitfield& bf);
// [...]
};

Bitfield::Bitfield& operator<<(Bitfield& bf, std::string& s) {
Bitfield TempBf;
TempBf.setSize(0);
bool DataError = false;
size_t wordlength = s.length();
TempBf.setSize(wordlength);
size_t bitPos = 0;
while ((bitPos < wordlength) && (!DataError)) {
if (s[(wordlength - 1) - bitPos] == '0') {
TempBf.setBit(bitPos, false);
bitPos++;
} else {
if (s[(wordlength - 1) - bitPos] == '1') {
TempBf.setBit(bitPos, true);
bitPos++;
} else {
DataError = true;
break;
}
}
}
if (!DataError)
bf = TempBf;
else
std::cerr
<< "Bitfield& operator<<(Bitfield& bf, std::string& s):
DatenFehler: Eingabe wird verworfen. Alte Werte weiter gültig ";

return bf;
}


Ähnliche Fehlermeldungen erhalte ich auch für die Implementierungen von

friend Bitfield& operator<<(Bitfield& bf, const std::string& s);
friend Bitfield& operator<<(Bitfield& bf, char const* s);
friend Bitfield& operator<<(Bitfield& lhs, const Bitfield& rhs);

friend std::istream& operator>>(std::istream& s, Bitfield& bf);
friend std::string& operator>>(std::string& s, Bitfield& bf);
friend char const * operator>>(const char * s, Bitfield& bf);
friend Bitfield& operator>>(const Bitfield& lhs, Bitfield& rhs);


Gibt es einen speziellen Visual-Studio-Weg um diese
Operatoren zu Implementieren?


Gruß Robert
 

Lesen sie die antworten

#1 Robert Hartmann
07/10/2009 - 15:08 | Warnen spam
Robert Hartmann schrieb:
Hallo zusammen,

ich habe mir eine Klasse geschrieben,
die ohne Probleme im g++ von MinGW
kompiliert.

Nun wollte ich probieren, ob der Code
auch vom MS Visual Studio 2005 kompiliert
wird.

Da ich meines Wissens nach keine speziellen
GCC-Sachen benutzt habe und auch keine
außergewöhnlichen Bibliotheken, sondern nur
C++ mit STL, hatte ich erwartet, dass Visual Studio
den Code akzeptiert.

Leider ist diese Erwartung überhaupt nicht
erfüllt worden.

Ich erhalte einige Fehlermeldungen,
zu Problem, die ich im Code nicht erkenne,
und deren Lösung mir nicht deutlich wird:


1>\bitfield.cpp(1163) : error C2143: syntax error : missing ';' before '&'
1>\bitfield.cpp(1163) : error C2761: '{ctor}' : member function
redeclaration not allowed
1>\bitfield.cpp(1163) : error C4430: missing type specifier - int
assumed. Note: C++ does not support default-int
1
>\bitfield.cpp(1190) : error C2440: 'return' : cannot convert from
'Bitfield' to 'int'
1> No user-defined-conversion operator available that can perform
this conversion, or the operator cannot be called
1>\bitfield.cpp(1191) : error C2617: 'operator <<' : inconsistent return
statement



Dabei bezieht sich der obige erste Fehler und der obige letzte Fehler
jeweils auf die erste und letzte Zeile dieses Codes:


class Bitfield{
//[...]
friend std::ostream& operator<<(std::ostream& s, const Bitfield& bf);
// [...]
};

Bitfield::Bitfield& operator<<(Bitfield& bf, std::string& s) {



^^^^^^^^^^^^^^
"Da war der Hund begraben",
wenn ich nun stattdessen

Bitfield& operator<<(Bitfield& bf, std::string& s) {

geschrieben hàtte, so hàtte nicht nur der g++ von MinGW
sondern auch MS Visual Studio den Code akzeptiert.

Gruß Robert

Ähnliche fragen