Prädikate mit for_each
-
hallo,
folgender code bereitet mir schwierigkeiten#include <iostream> #include <fstream> #include <algorithm> #include <string> #include <vector> void mach(const std::string &str) { std::cout << "bla" << str << std::endl; } int main() { std::ifstream in("C:\\foo.txt"); std::istream_iterator<std::string> ii(in); std::istream_iterator<std::string> eos; std::vector<std::string> b(ii, eos); for_each(b.begin(), b.end(), mach); return 0; }
--------------------Konfiguration: file - Win32 Debug-------------------- Kompilierung läuft... main.cpp C:\Dokumente und Einstellungen\Administrator\Desktop\energis referer\file\main.cpp(18) : error C2664: '__thiscall std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::bas ic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >::std::vector<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_tra its<char>,class std::allocator<char> > > >(unsigned int,const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &,const class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std:: allocator<char> > > &)' : Konvertierung des Parameters 1 von 'class std::istream_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,char,struct std::char_traits<char> >' in 'unsigned int' nicht moeglich Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden C:\Dokumente und Einstellungen\Administrator\Desktop\energis referer\file\main.cpp(20) : error C2065: 'for_each' : nichtdeklarierter Bezeichner Fehler beim Ausführen von cl.exe. file.exe - 2 Fehler, 0 Warnung(en)
for_each ist in algorithm definiert und wie man unschwer erkennen kann, habe ich algorithm hinzugefügt.
danke für eure hilfe
-
Morgen,
using namespace std; //oder using std::for_each; //oder std::for_each(...);
mfg
v R
-
ok, for_each kann jetzt genau referenziert werden durch std::
war ein flüchtigkeitsfehler von mirnun bleibt noch ein fehler offen. und zwar tritt ein fehler bei folgender zeile
aufstd::vector<std::string> b(ii, eos);
--------------------Konfiguration: file - Win32 Debug-------------------- Kompilierung läuft... main.cpp C:\Dokumente und Einstellungen\Administrator\Desktop\energis referer\file\main.cpp(18) : error C2664: '__thiscall std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::bas ic_string<char,struct std::char_traits<char>,class std::allocator<char> > > >::std::vector<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_tra its<char>,class std::allocator<char> > > >(unsigned int,const class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > &,const class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std:: allocator<char> > > &)' : Konvertierung des Parameters 1 von 'class std::istream_iterator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,char,struct std::char_traits<char> >' in 'unsigned int' nicht moeglich Kein benutzerdefinierter Konvertierungsoperator verfuegbar, der diese Konvertierung durchfuehren kann, oder der Operator kann nicht aufgerufen werden Fehler beim Ausführen von cl.exe. file.exe - 1 Fehler, 0 Warnung(en)
danke!
-
weiß nicht was dein Compiler meint. Des Spaßes halber hab ich den Code copy/paste und bei mir compilieren und laufen gelassen. Es läuft genauso wie es sollte.
Nik0n
-
Läuft bei mir auch problemlos, aber erst, als ich den Header <iterator> eingefügt habe. Welchen Compiler benutzt du? Ich benutze gcc 3.4.2
-
ich benutze msv 6
-
hmm, vielleicht gehts, wenn du mach() in eine Klasse umschreibst, die von unary_function<string,void> erbt und an for_each übergibst.
-
gast__ schrieb:
ich benutze msv 6
hast du dann den STL Fix installiert ?
Wenn nicht, such im Forum mal danach...Devil
-
Hallo,
die beim VC 6.0 mitgelieferte Dinkumware-STL verwendet keine Membertemplates (da sie auch schon bei noch älteren VC-Versionen dabei war, die ganz ohne Membertemplate-Support daher kamen). D.h. der vector-Konstruktor der zwei beliebige Iteratoren erwartet existiert hier nicht. Stattdessen kann dieser Ctor nur mit std::vector-Iteratoren umgehen. Lösung: Statt des Ctors musst du einen Algo wie std::copy + einen back_inserter verwenden:std::istream_iterator<std::string> ii(in); std::istream_iterator<std::string> eos; std::vector<std::string> b; std::copy(ii, eos, back_inserter(b));