Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Pieni ongelma malliluokkien ja iteraattorien kanssa

template [18.08.2008 11:47:34]

#

Terve

Tuli tuossa koodatessa vastaan outo ongelma. Kääntäjä antaa virhettä, enkä tajua missä vika voisi olla. Tässä koodi lyhennettynä:

#include <map>

template <class F>
class SharedFilelist {
public:
    virtual ~SharedFilelist();

private:
    std::map<int,SharedGroup<F>*> groupList;
    std::map<int,F*> fileList;
};

template <class F>
SharedFilelist<F>::~SharedFilelist() {
    std::map<int,F*>::iterator fileIter;
    for(fileIter = fileList.begin(); fileIter < fileList.end(); fileIter++)
        delete fileIter->second;

    std::map<int,SharedGroup<F>*>::iterator groupIter;
    for(groupIter = groupList.begin(); groupIter < groupList.end(); groupIter++)
        delete groupIter->second;
}

Tuosta XCode (g++) valittaa:
SharedFilelist.cpp:19: error: expected `;' before 'fileIter'
SharedFilelist.cpp:20: error: 'fileIter' was not declared in this scope

SharedFilelist.cpp:23: error: expected `;' before 'groupIter'
SharedFilelist.cpp:24: error: 'groupIter' was not declared in this scope


Eli ei ymmärtääksi jostain syystä hyväksy rivejä:
std::map<int,F*>::iterator fileIter;
std::map<int,SharedGroup<F>*>::iterator groupIter;

Jos joku ymmärtää näistä malli jutuista paremmin niin olisin todella kiitollinen avusta.

koo [18.08.2008 13:45:51]

#

Yleensä templaateissa olevista muuttuja- tai tyyppimäärittelyistä tulee virheitä sen takia, että kääntäjä ei ole pystynyt varmuudella päättelemään, että käytetty tunnus on tyypin nimi. Avainsana typename määrittelyn edessä yleensä ratkaisee asian.

(Anteeksi pintapuolinen, yleistasoinen ja mahdollisesti väärä vinkki. Minulla ei nyt juuri ole aikaa tutkia koodia tarkemmin eikä myöskään vehkeitä, jolla voisin asian varmistaa.)

template [18.08.2008 13:52:08]

#

Kiitoksia!!!
Alkoi tuolla typename-jutulla alkoi heti toimia :D

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta