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!!!!!


Anmelden zum Antworten