Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Stl und Visual C++

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
19.09.2003, 14:18 Uhr
~stephanw
Gast


Hi !

Folgendes Problem: sobald ich z.B. <vector> oder <list> include, bekomme ich folgende Fehlermeldung:

Code:
C:\Programme\Microsoft Visual Studio\VC98\INCLUDE\xstring(44) : error C2678: Binaerer Operator ',' : Kein Operator definiert, der einen linksseitigen Operator vom Typ 'void' akzeptiert (oder keine geeignete Konvertierung moeglich)
        C:\Programme\Microsoft Visual Studio\VC98\INCLUDE\xstring(42) : Bei der Kompilierung der Member-Funktion '__thiscall std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >::std::basic_string<char,struct std::char_t
raits<char>,class std::allocator<char> >(const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &)' der Klassenvorlage
Fehler beim Ausführen von cl.exe.



Habe bisher nichts gefunden, um den Fehler zu beheben. Habe schon in den Projekteinstellungen rumgeeiert, aber auch das erfolglos (ist ansonsten ein kleines Standard-Projekt zu Testen, Konsolenanwendung). Hat jemand Tipps, woran das liegt ? Der STL-Quellcode wird ja wohl nicht falsch sein ...

Grüße, Stephan.


Bearbeitung von loddab:
code-Tags gesetzt

Dieser Post wurde am 19.09.2003 um 14:23 Uhr von Loddab editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
19.09.2003, 14:22 Uhr
typecast
aka loddab
(Operator)


Poste mal deinen Code.
--
All parts should go together without forcing. ... By all means, do not use a hammer. (IBM maintenance manual, 1925)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
19.09.2003, 14:39 Uhr
virtual
Sexiest Bit alive
(Operator)



Zitat:
~stephanw postete
Hi !
[...]

Code:
[...]
C2678: Binaerer Operator ',' : Kein Operator definiert, der einen linksseitigen Operator vom Typ 'void' akzeptiert
[...]




Du hast vermutlich irgendwo ein Komma in Deinem Quelltext stehen wo es nicht hingehört.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
19.09.2003, 15:18 Uhr
~stephanw
Gast


Hi !

Ich hab den Fehler gefunden:

inline void operator,(Foo& f1, Foo& f2)
{
f1.value = 0;
f2.value = 0;
}

Hier ist das "überflüssige" Komma, allerdings verstehe ich das nicht so recht, weil ich den Komma-Operator ja für Foo-Objekte definiert habe. Das funktioiert ohne STL auch wunderbar, weil Komma überladen werden darf (laut Doku). Wo ist das Problem ? Hängt das mit namespaces zusammen ?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
19.09.2003, 15:35 Uhr
virtual
Sexiest Bit alive
(Operator)


Ja , man darf den Komma operator überladen, aber ich habe bisher noch keinen Source geseh, wo dies wirklich sinnvoll wäre. Dein beispiel zeigt bereits schon eindruckvoll, welchen Unsinn man damit machen kann. Denn normalerweise bedeutet:

C++:
a  = b, c;


Das dem a der Wert von c zugewiesen wird, weil der Kommaoperator als Ergebnis den Wert des Rechtseitigen Ausdrucks des Komma operators haben sollte. Dadauch, daß du void zurückgibst, brichst Du diese Vereinbarung. Und die STL wird sicherlich irgendwo mal den Kommaoperator anwenden und dann darüber stolpern, daß da ein void rauskommt.
Da sich mir alle Haare sträuben, wenn ich sowas wie oben sehe, verzichte ich an dieser Stelle, einen Lösungsansatz zu posten.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
19.09.2003, 15:50 Uhr
~stephanw
Gast


Hm. Das war von mir nur ein Dummy-Beispiel, weil ich mal das Operator-Überladen testen wollte, einen tieferen Sinn hatte das also nicht. Aber ich verstehe nicht, warum er das dort anwenden will, weil sich _meine_ Komma-Überladung doch nur auf Foo bezieht bzw. dort angewendet werden soll, nicht bei <SomeOtheType> a, b oder c ...
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
19.09.2003, 16:26 Uhr
virtual
Sexiest Bit alive
(Operator)


Mehr Source.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
19.09.2003, 16:37 Uhr
~stephanw
Gast



C++:
#include <vector>

class Foo
{
    public:
        char* name;
        int value;
};

inline void operator,(Foo& f1, Foo& f2)
{
    f1.value = 0;
    f2.value = 0;
}

int main (int argc, char **argv)
{
    return 1;
}



Schon beim reinen #include der vector-header geht er ab :-( Aber ich will auch nicht draufrumreiten und Dich/Euch in Arbeit stürzen ;-) da ich den Komma-Operator ja nicht dringend brauche ...

Vielen Dank und Grüße, Stephan.


Bearbeitung von loddab:
Tags korrigiert

Dieser Post wurde am 19.09.2003 um 16:39 Uhr von Loddab editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
19.09.2003, 16:46 Uhr
virtual
Sexiest Bit alive
(Operator)


Das scheint mir dann aber ein Problem Deines Compilers zu sein: Zum Zeitpunkt des Includes hast Du ja noch diesen Unsäglichen Komma Operatoroverload gemacht.
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
19.09.2003, 16:57 Uhr
~stephanw
Gast


Ja eben deshalb frage ich ja hier, weil ich das auch denke. Aber es geht, sobald ich entweder die Komma-Operator-Überladung oder das #include entferne. Trotzdem vielen Dank und Grüße, Stephan.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: