2010-10-29 6 views
1

Dans un code que je vous écris, j'ai la ligne suivante, ce qui me donne l'erreur C2064:erreur C2064: terme ne pas prendre une fonction 0 arguments

rs_opCodes[cur_block](); 

rs_opCodes est défini comme tel:

typedef void (rsInterpreter::*rs_opCode)(); 
rs_opCode rs_opCodes[NUM_OPCODES]; 

Est-ce que quelqu'un sait pourquoi je reçois l'erreur C2064?

Répondre

0

Vous avez défini rs_opCode comme un pointeur de méthode mais vous l'utilisez comme pointeur de fonction.

4

Vous devez utiliser la syntaxe de l'appel de pointeur de méthode, mais vous avez besoin d'un objet pour effectuer l'appel réel. Notez que le typedef stablishes que vous définissez des pointeurs sur une méthode d'objets de type rsInterpreter, vous avez besoin d'un objet de ce type:

rsInterpreter r; 
(r.*rs_opCodes[cur_block])(); 

Cependant, l'idée de cela ne fait pas beaucoup de sens moi. Vous écrivez un tableau de pointeurs de méthode à appeler dans les objets ... Je ne peux pas, à première vue, sortir de mon esprit d'un exemple utilisable de ce type de code ...

+0

je me suis dit que je ne devrais pas puisque la ligne était en fonction membre. Je suppose que j'avais tort. Merci! – Jarrod

+0

"Je ne peux pas, d'abord pensé ..." - Je dirais que 'rsInterpreter' est une machine virtuelle, et' rs_opCodes' est un programme. Au lieu de coder les opcodes comme des entiers, ils sont codés comme des pointeurs de fonction membres. Une opération est exécutée en appelant la fonction membre correspondante sur la machine virtuelle. C'est un modèle de machine virtuelle limitée, car il n'y a pas de place pour les valeurs immédiates dans les opcodes, mais il peut voler. –

+0

@Steve: Merci! Je n'ai juste pas pensé à interpréter les noms des variables :) –

2

Vous avez défini rs_opCode en tant que pointeur vers une fonction membre (de classe rsInterpreter). Pour appeler une telle bête, vous avez besoin du sytax

(object.*rs_opCodes[cur_block])(); 

ou

(pointer->*rs_opCodes[curr_block])(); 
Questions connexes