2014-05-10 3 views
2

J'ai une classe qui est définie comme suit:Nom heurtant avec la méthode de classe

class Socket { 
public: 
    Socket(); 
    virtual ~Socket(); 

    int open(); 
    void close(); 

private: 
    int mHandle; 
    int mState; 
}; 

Ensuite, je mets en œuvre la méthode close() en tant que tel:

void Socket::close() 
{ 
    if (mHandle!=0) 
     close(mHandle); 
} 

Le « close (mHandle) "à l'intérieur de ma clôture est celui défini dans et AFAIK il n'est pas dans un espace de noms.

Pour contourner le problème, je me renomme près de quelque chose d'autre, mais il doit y avoir un autre moyen ...

+3

Try ':: close (mHandle)' à force de chercher dans l'espace de noms racine – jsantander

Répondre

4

Nom recherche se termine dès qu'au moins une fonction se trouve. Vous pouvez qualifier le nom pour qu'il commence à chercher au bon endroit:

::close(mHandle); 

Ou déclarer le nom localement pour consultation court-circuite les membres de la classe:

using ::close; 
close(mHandle); 
+0

merci! J'ai déjà vu cette notation avant, mais je n'ai jamais cessé de penser à ce que cela signifiait vraiment jusqu'à présent. –

Questions connexes