Fehler C2784
-
Hallo,
wollte jetzt mein Programm kompilieren und habe diese Fehlermeldungen erhalten:
d:\vc98\include\list(314) : error C2784: 'bool __cdecl std::operator <(const class std::list<_Ty,_A> &,const class std::list<_Ty,_A> &)' : Vorlagenargument fuer 'const class std::list<_Ty,_A> &' von 'class std::basic_string<char,struct std::char_tra
its<char>,class std::allocator<char> >' konnte nicht hergeleitet werden
d:\vc98\include\list(310) : Bei der Kompilierung der Member-Funktion 'void __thiscall std::list<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct
std::char_traits<char>,class std::allocator<char> > > >::merge(class std::list<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,cl
ass std::allocator<char> > > > &)' der Klassenvorlage
d:\vc98\include\list(314) : error C2784: 'bool __cdecl std::operator <(const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &,const class std::reverse_iterator<_RI,_Ty,_Rt,_Pt,_D> &)' : Vorlagenargument fuer 'const class std::reverse_iterator<_RI,_
Ty,_Rt,_Pt,_D> &' von 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' konnte nicht hergeleitet werden
d:\vc98\include\list(310) : Bei der Kompilierung der Member-Funktion 'void __thiscall std::list<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct
std::char_traits<char>,class std::allocator<char> > > >::merge(class std::list<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,cl
ass std::allocator<char> > > > &)' der Klassenvorlage
d:\vc98\include\list(314) : error C2784: 'bool __cdecl std::operator <(const struct std::pair<_T1,_T2> &,const struct std::pair<_T1,_T2> &)' : Vorlagenargument fuer 'const struct std::pair<_T1,_T2> &' von 'class std::basic_string<char,struct std::ch
ar_traits<char>,class std::allocator<char> >' konnte nicht hergeleitet werden
d:\vc98\include\list(310) : Bei der Kompilierung der Member-Funktion 'void __thiscall std::list<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct
std::char_traits<char>,class std::allocator<char> > > >::merge(class std::list<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,cl
ass std::allocator<char> > > > &)' der Klassenvorlage
d:\vc98\include\list(314) : error C2676: Binaerer Operator '<' : 'class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >' definiert diesen Operator oder eine Konvertierung in einen fuer den vordefinierten Operator ge
eigneten Typ nicht
d:\vc98\include\list(310) : Bei der Kompilierung der Member-Funktion 'void __thiscall std::list<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct
std::char_traits<char>,class std::allocator<char> > > >::merge(class std::list<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,cl
ass std::allocator<char> > > > &)' der KlassenvorlageBei MSDN steht, dass das mit einer Funktion zusammenhängt, hab aber noch geguckt, sind eigentlich alle richtig von Syntax.
Danke für jede Antwort.
Unzi
-
Schreibe mal die betreffenden Codestellen heraus.
-
Kannst du auch die entsprechenden Codezeilen posten?
-
hehe, du glaubst ernsthaftig, dass dir jemand bei so einem plumpen Haufen Fehlermeldungen hilft? Denkst du, C++ Programmierer sind übergeschnappte Freaks, die wie Computer denken?
-
Es werden Codestellen aus diversen includes angezeigt, nichts präzises im Programm, sonst wärs auch leichter.
@Mis2Com: Es soll diese "übergeschnappte Freaks, die wie Computer denken" tatsächlich geben, und ich denke, einige befinden sich in diesem Forum. Ich zielte allerdings darauf ab, dass es einen Menschen geben könnte, der diese Felhermeldungen auch schon mal hatte.
-
Nagut, dann setze die Fehlermeldungen mal wenigstens in ein ordentliches Tag:
[cpp]Fehlermeldungen[/cpp]
oder
[quote]Fehlermeldungen[/quote]
z.B.Sollte das deutlich besser lesbar machen.
Beispiel:
Quote-TAG
C++ Code-TAG
MfG Eisflamme
-
Leute, mitdenken:
Wenn die Datei "d:\vc98\include\list" heißt, waskönnte das wohl bedeuten.Hast du in der Datei rumgepfuscht? Und übrigens ist das nicht das Forum, in dem man fehler des MSVCs bespricht.
-
Ich denke nicht das MSVC einen Fegler hat, und ich ändere doch nicht irgendwelche Include-Dateien, was bringts mir denn?
-
Du wirst doch irgendwie wissen, nach welcher Codeänderung der Fehler auftrat. Hat jedenfalls was mit list zu tun. So ist das ganzen nur ein Rätselraten.
Helium schrieb:
Leute, mitdenken:
Wenn die Datei "d:\vc98\include\list" heißt, waskönnte das wohl bedeuten.Hast du in der Datei rumgepfuscht? Und übrigens ist das nicht das Forum, in dem man fehler des MSVCs bespricht.
Solche Fehler in den Headern kommen doch auch durch Templates zustande.
-
Hallo,
kann es sein, dass du zwei Iteratoren per < vergleichst?
Irgendwie sowas:list<string> l; list<string>::iterator it = l.begin(); while (it < l.end()) ...
-
Helium schrieb:
Leute, mitdenken:
Wenn die Datei "d:\vc98\include\list" heißt, waskönnte das wohl bedeuten.Hast du in der Datei rumgepfuscht? Und übrigens ist das nicht das Forum, in dem man fehler des MSVCs bespricht.
Na, falsche Schlussfolgerung.
Der Fehler tritt nur da auf, weil in diesem Beispiel das Vorlageargument in dieser Datei nicht hergeleitet worden konnte. Dass das nicht möglich ist, ist natürlich auf einen Programmierfehler des Benutzers der STL zurückzuführen.MfG Eisflamme
-
Der Müll kam das erste mal nachdem ich von vector<string> auf list<string> umgestellt habe, am vorher funktionierenden code habe ich wenig geändert.
-
Hatse mal versucht den ganzen Code im Copy& Paste verfahren auszulagern, ein neues Projekt anzulegen, den Kram da rein zu packen und neu zu kompilieren?
VS "verschluckt" sich manchmal. Mir ist mal was ähnliches passiert, nach einer (eigentlich trivialen) Programmänderung warf der VS- Compiler merkwürdigste Fehlermeldungen aus. Mit dem oben beschriebenen Verfahren konnte ich ihm diese "austreiben".
-
Ein "Rebuild All" würde auch reichen.
Fehlermeldung macht man in Quotes, wenn überhaupt, niemals in C++-Tags, weil sie dann das Forum verzerren.
Es wäre auch möglich, das was mit der includereihenfolge nicht stimmt, das verursacht manchmal auch seltsame probleme.
-
Hallo,
also imo ist der Fehler recht eindeutig, aber ihr könnte natürlich auch weiter ins blaue raten und an den Projektsettings rumdrehen.
-
hust hust sieht mir sehr nach nem std::list.sort() aus^^
string hat den < operator nich überladen
-
Tatsächlich, ein sort wars, einziges Problem ist, dass ich die Liste wirklich sortiren will, es aber anscheinend nicht kann.
-
unzi schrieb:
Tatsächlich, ein sort wars, einziges Problem ist, dass ich die Liste wirklich sortiren will, es aber anscheinend nicht kann.
Die Memberfunktion sort von list gefällt dir nicht?
-
abhilfe schafft das überladen des kleiner operators für string
bool operator<(std::string a,std::string b){ unsigned int length; if(a.length()>b.length()){ length=b.length(); } else { length=a.length(); } for(unsigned int i=0;i<=length;++i){ if(a[i]>b[i]){ return false; } } return true; }
nicht getestet, aber ich denke, diese aphabetische kleiner sortierung("a" ist kleiner als "b") sollte dir weiterhelfen
-
otze schrieb:
abhilfe schafft das überladen des kleiner operators für string
Aber nicht, wenn du eine std::list mit std::sort bearbeiten willst. Nur weil du den op< überlädst, werden aus bidirektionalen Iteratoren nicht auf einmal random-access Iteratoren.