Soit le code suivant
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class A
{
public:
   A(){}
   void MaMethode(){std::cout<<"coucou\n";}
};
 
int main()
{
   A a;
   typedef void (A::*tdMethodeSurA)();
   tdMethodeSurA MethodeSurA;
   MethodeSurA  = &(A::MaMethode);
   (a.*MethodeSurA)();
}
Ca compile avec VC++Express mais pas avec gcc. Pourquoi?
La ligne de commande gcc est:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
g++ -c -o Debug\obj\main.o -g -O0 -mthreads  -W -Wall -DNOPCH   -Wno-ctor-dtor-privacy   -MTDebug\obj\main.o -MFDebug\obj\main.o.d -MD Sources/main.cpp
L'erreur est:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
Sources/main.cpp:82: error: invalid use of non-static member function `void A::MaMethode()'
Sources/main.cpp:82: error: parenthesis around 'A::MaMethode' cannot be used to form a pointer-to-member-function