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.
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.)
Kiitoksia!!!
Alkoi tuolla typename-jutulla alkoi heti toimia :D
Aihe on jo aika vanha, joten et voi enää vastata siihen.