[C++] MS Visual Studio 2005 / g++ von MinGW
Von: Robert Hartmann (robert_hartmann@gmx.net) [Profil]
Datum: 07.10.2009 12:40
Message-ID: <4ACC7025.3040906@gmx.net>
Newsgroup: de.comp.os.ms-windows.programmer
Datum: 07.10.2009 12:40
Message-ID: <4ACC7025.3040906@gmx.net>
Newsgroup: de.comp.os.ms-windows.programmer
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):
\nDatenFehler: Eingabe wird verworfen. Alte Werte weiter gültig \n";
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
[ Auf dieses Posting antworten ]Antworten
- Robert Hartmann (07.10.2009 15:08)
