Template iterator
-
Hallo zusammen,
ich habe folgenden Code:
typename Samples::iterator under_median = tempSamples.begin(); std::advance(under_median, med_index-1); typename Samples::iterator over_median = tempSamples.begin(); std::advance(over_median, med_index); median = (over_median + under_median)/2;
zur Berechnung des Medians der Klasse Sample (im Grunde nur ein list<T>). Wenn ich es in meiner kleinen Testanwendung compiliere, keine Fehler. Baue ich es in meine große Anwendung ein, bekomme ich:
In instantiation of ‘void SamplingWindow<T>::updateStatistic() [with T = GenericTime]’: SamplingWindow.h:151:13: required from ‘void SamplingWindow<T>::addSample(const T&) [with T = GenericTime]’ common/estimation/max/MaxEstimation.cc:75:45: required from here SamplingWindow.h:251:21: error: no match for ‘operator+’ in ‘over_median + under_median’ SamplingWindow.h:251:21: note: candidates are: const SimTime operator+(const SimTime&, const SimTime&) /opt/omnetpp-4.4.1/include/simtime.h:359:22: note: no known conversion for argument 1 from ‘std::list<GenericTime, std::allocator<GenericTime> >::iterator {aka std::_List_iterator<GenericTime>}’ to ‘const SimTime&’
Was mache ich denn falsch? Ich habe es schon mit:
std::iterator_traits<over_median>::value_type over_median_val = *over_median;
Um over_median bzw. unter_median zu ersetzen, aber dass klappt leider nicht. Da kam ich auf gar keinen grünen Zweig. Jemand einen Tip für mich? Wäre cool.
Beste Grüße
sven_
-
Warum benutzt du std::advance? Weil Listiteratoren keine RandomAccesIteratoren sind, zu denen man einfach eetwas hinzu addieren kann. Warum sollte dann over_median + under_median funktionieren? Oder meinst du an dieser Stelle *over_median + *under_median?
-
oh man stimmt. peinlich, peinlich.
vielen dank! da hab ich mal wieder nur bis zum feierabend gedacht. Danke vielmals!!!!!