2010-06-19 5 views
0

J'essaie de compiler CSSTidy avec Visual Studio."fonction membre inexistante spécifiée comme ami" -?

Le problème est qu'il jette

erreur C2245: fonction membre non existant 'umap :: effacer' spécifié comme ami (signature de la fonction de membre ne correspond à aucune surcharge)

pointage à la

friend void umap<keyT,valT>::erase(const typename umap<keyT,valT>::iterator& it); 

qui est une déclaration iterator classe déclarée dans umap classe.

Quelqu'un peut-il me dire où devrais-je creuser pour comprendre quel est vraiment le problème? AFAIK la source compile en MinGW ...

+0

Est-il même permis de se lier d'amitié avec _member_ functions? – sbi

+1

@sbi: Oui: http://www.csci.csusb.edu/dick/c++std/cd2/access.html#class.friend. Faites défiler jusqu'à # 4. –

+0

@Billy: Oups, je ne savais pas ça! – sbi

Répondre

2

Le correctif, déclare l'avant "iterator classe;" en haut de la classe umap, et déplacez l'impl de "class itérateur" vers le bas de la classe umap. La raison, MickySoft VS semble avoir une déficience qui fait qu'elle ne reconnaît pas umap :: erase déclaré sous l'impl de umap :: iterator.

template <class keyT, class valT> 
class umap 
{ 
    typedef map<keyT,valT> StoreT; 
    typedef std::vector<typename StoreT::iterator> FifoT; 
private: 
    FifoT sortv; 
    StoreT content; 

public: 

    class iterator; 

    [...snip...] 

    void erase(const typename umap<keyT,valT>::iterator& it) 
    { 
    content.erase(*it.pos); 
    sortv.erase(it.pos); 
    } 

    [...snip...] 

    // Iterator 

    class iterator 
    { 
    [...snip...] 
    }}; 
0

la source compile en MinGW

Erm .. donc?

Y a-t-il une fonction membre d'effacement umap visible par le compilateur lors de la compilation de la classe interne?

Billy3

+0

yup, c'est public. Comme je l'ai déjà dit, MinGW le compile ... c'est étrange pour moi. – migajek

+0

Pouvez-vous poster la méthode que vous souhaitez que cela corresponde? La déclaration est-elle située avant ou après la déclaration 'friend'? (MinGW est laxiste sur l'application de la règle de prototype de fonction) –

Questions connexes