Funktoren und unary_function
-
Hey
Wie gesagt, die Fehlermeldung ist:
../main.cpp:16: instantiated from herebeim Funktionsaufruf von
transform(v1.begin(),v1.end(),osIt(cout,", "),divide10());
-
Das ist alles? Wirklich? Ganz, ganz ehrlich?
-
Nun, da gibts ne elend lange Meldung, ich schreib sie einfach mal hin, wenn's dir hilft!
**** Full rebuild of configuration Debug for project Z_diverses **** make -k clean all make: Warning: File `objects.mk' has modification time 0.7 s in the future rm -rf ./main.o ./main.d Z_diverses.exe Building file: ../main.cpp Invoking: GCC C++ Compiler g++ -IC:\cygwin\usr\include\boost-1_33_1 -O0 -g3 -Wall -c -fmessage-length=0 -omain.o ../main.cpp ../main.cpp: In function `int main()': ../main.cpp:29: warning: unused variable 'c1' /usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_algo.h: In function `_OutputIterator std::transform(_InputIterator, _InputIterator, _OutputIterator, _UnaryOperation) [with _InputIterator = __gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >, _OutputIterator = std::ostream_iterator<int, char, std::char_traits<char> >, _UnaryOperation = divide10]': ../main.cpp:44: instantiated from here /usr/lib/gcc/i686-pc-cygwin/3.4.4/include/c++/bits/stl_algo.h:789: warning: passing `float' for converting 1 of `std::ostream_iterator<_Tp, _CharT, _Traits>& std::ostream_iterator<_Tp, _CharT, _Traits>::operator=(const _Tp&) [with _Tp = int, _CharT = char, _Traits = std::char_traits<char>]' Finished building: ../main.cpp Building target: Z_diverses.exe Invoking: GCC C++ Linker g++ -oZ_diverses.exe ./main.o Finished building target: Z_diverses.exe Build complete for project Z_diverses
-
roxor schrieb:
Build complete for project Z_diversesWo ist das Problem?
-
Du solltest die Warnings posten, nicht dein ganzes verdammtes Build-Log. Darüber hinaus wäre es auch hilfreich zu sagen ob dein Code sich nicht kompilieren lässt oder schlicht nicht das erhoffte Ergebnis fabriziert. Und den tatsächlichen Code zu posten würde auch nicht schaden.
Dein eigentliches Problem sind die falschen Datentypen. (int / int -> int)
typedef ostream_iterator<float> osIt; // ... transform(v1.begin(), v1.end(), osIt(cout, ", "), bind2nd(divides<float>(), 10.f));
-
finix schrieb:
Du solltest die Warnings posten, nicht dein ganzes verdammtes Build-Log. ...
Na, doch kein Grund, unfreundlich zu werden ....

Schließlich wurde er mehrfach deutlich aufgefordert, "alles zu zeigen"; wenn er das nun tut (und der output auch noch so klein ist), finde ich das voll in Ordnung.@"roxor": Anscheinend passt die Meldung nicht ganz zu Deinem Quellcode (Zeile 44 gibt's da nicht) - vermutlich hast Du den gekürzt (was ich eigentlich begrüße)
"../main.cpp:44: instantiated from here " ist dabei lediglich eine Erläuterung zu der eigentlich Warnung:
"warning: passing `float' for converting 1 of `std::ostream_iterator<...'"Es kann für die Fehlersuche sehr hilfreich sein, zu wissen, wo welches template instantiiert wurde (Merke: Der Compiler erzeugt von jedem template bei Bedarf eine "echte" (konkrete) Klasse/Funktion mit den entsprechenden template-Parametern ... diesen Vorgang nennt man "template-Instanziierung").
Beim "Teilen durch 10 von Integern" würde ich an Deiner Stelle nochmal überdenken, was Du wirklich willst....
Gruß,
Simon2.
-
Zwei kleine Anmerkungen noch zu deinem Quellcode:
roxor schrieb:
struct divide10:public std::unary_function<int,float>{ float operator()(const int j) const { return j/10; } };Das funktioniert zwar, liefert aber vermutlich das falsche Ergebnis (Stichwort: Ganzzahl-Rechnung). richtig wäre wohl "return (float)j / 10;".
v1 += 12,23,34,45,56,67,78,89,90; v2 += 1,1,1,1,1,1,1,1,1; }Diese beiden Zeilen sind Unsinn (erstaunlich, daß dein Compiler das geschluckt hat) - vector<> hat keinen operator+= und selbst wenn, würde der nur den letzten Wert dieser Sammlung bekommen.
-
CStoll schrieb:
...
v1 += 12,23,34,45,56,67,78,89,90; v2 += 1,1,1,1,1,1,1,1,1; }Diese beiden Zeilen sind Unsinn (erstaunlich, daß dein Compiler das geschluckt hat) - vector<> hat keinen operator+= und selbst wenn, würde der nur den letzten Wert dieser Sammlung bekommen.
Nutzt er vielleicht boost/assign/std/vector.hpp ?
( http://www.boost.org/libs/assign/doc/index.html )
da geht das nämlich ...Gruß,
Simon2.
-
Simon2 schrieb:
finix schrieb:
Du solltest die Warnings posten, nicht dein ganzes verdammtes Build-Log. ...
Na, doch kein Grund, unfreundlich zu werden ....

Schließlich wurde er mehrfach deutlich aufgefordert, "alles zu zeigen"; wenn er das nun tut (und der output auch noch so klein ist), finde ich das voll in Ordnung.Genau, "Was meckert er denn wo an?" war die Aufforderung das ganze Build-Log zu posten. Und jemanden auf die vielfältigen Probleme seiner Fragetaktik hinzuweisen ist wirklich so was von unfreundlich. Danke, Simon2.

-
finix schrieb:
...nicht dein ganzes verdammtes Build-Log. ...
Ist einfach unfreundlich, fertig.
Übrigens ist sein "ganzes verdammtes Build-Log" deutlich kürzer als der Source-code der meisten Fragesteller hier.finix schrieb:
...Das ist alles? Wirklich? Ganz, ganz ehrlich? ...
Ist auch nicht unbedingt entgegenkommend und dass er daraufhin nicht einfach nochmal das schickt, was er als "alles" empfindet, sondern "alles, was der Compiler rausspuckt", empfinde ich wirklich nicht als Dämlichkeit.
Überdenke einfach mal den Ton, mit dem Du hier auftrittst ... sprichst Du so auch mit Deinen Freunden ?
Gruß,
Simon2.