2016-03-01 2 views
0

J'ai le code suivant dans MyClass.h fichier:erreur de compilation unordered_map de emplace

typedef std::unordered_set< int, int> Parameters; 
class MyClass 
{ 
    public: 
     void myFunction(); 
    private: 
     Parameters* m_params; 
} 

Ensuite, maFonction se présente comme suit:

void MyClass::myFunction() 
{ 
    ... 
    m_params->emplace(1,1); 
} 

Lorsque je tente de compiler, je get:

le terme n'évalue pas à une fonction prenant 1 argument

Si je commente la ligne emplace, l'erreur disparaît. Cependant, je ne trouve aucune utilisation abusive liée à cette signature de la fonction: http://en.cppreference.com/w/cpp/container/unordered_map/emplace

Toute aide serait grandement appréciée.

+2

'std :: unordered_set! = Std :: unordered_map'. – BoBTFish

Répondre

1

Typo simple: Vous avez utilisé std::unordered_set dans votre code, mais vous vouliez dire std::unordered_map. Votre implémentation ne reconnaît aucun paramètre d'erreur Hash à dans le modèle std::unordered_set jusqu'à ce que vous essayiez d'insérer quelque chose dans le conteneur. Ensuite, il essaie de hacher l'entrée, et se rend compte qu'il ne peut pas utiliser un int en tant que fonction.

+0

mon mauvais ... long temps de travail .... Merci beaucoup – omniyo

+0

Il est temps de faire une pause alors! Vous allez probablement faire une erreur que le compilateur ne vous sauvera pas, et vous mordra dans le cul plus tard. – BoBTFish