2010-10-12 5 views
1

Pourquoi ce code entraîne-t-il une erreur de compilation?mem_fun_ref question

#include <iostream> 
#include <algorithm> 

using namespace std; 

class X 
{ 
    public: 
     void Print(int x) 
     { 
      cout << x << endl; 
     } 
}; 

int main() 
{ 
    X x; 
    mem_fun_ref<void, X, int>(&X::Print) p; 
}; 

Erreur main.cpp:18: error: expected ; before p

Répondre

2

mem_fun_ref est un modèle de fonction, il ne nomme pas un type. Est un appel de fonction qui renvoie une valeur, cela n'a donc aucun sens qu'il y ait un p qui le suit.

La valeur de retour de cet appel de fonction est un mem_fun1_ref_t<void, X, int>, au cas où vous le cherchiez.

2

Avez-vous l'intention d'écrire

mem_fun1_ref_t<void, X, int> p(&X::Print); 
      ^^^^    ^^^ 

à la place? mem_fun_ref n'est pas un modèle de classe, mais un modèle de fonction.