2010-04-26 8 views
4

j'ai deux tâches Cpp de base, mais j'avoir des problèmes avec eux. La première consiste à écrire les fonctions mul1, div1, sub1, sum1, en prenant ints comme arguments et en retournant ints. Ensuite, j'ai besoin de créer des pointeurs ptrFun1 et ptrFun2 pour les fonctions mul1 et sum1, et d'imprimer les résultats de leur utilisation. Le problème commence par la définition de ces pointeurs. Je pensais que je faisais bien, mais devcpp me donne des erreurs dans la compilation.des pointeurs vers des fonctions

#include <iostream> 
using namespace std; 

int mul1(int a,int b) 
{ 
    return a * b; 
} 

int div1(int a,int b) 
{ 
    return a/b;  
} 

int sum1(int a,int b) 
{ 
    return a + b; 
} 

int sub1(int a,int b) 
{ 
    return a - b;  
} 


int main() 
{ 
    int a=1; 
    int b=5; 

    cout << mul1(a,b) << endl; 
    cout << div1(a,b) << endl; 
    cout << sum1(a,b) << endl; 
    cout << sub1(a,b) << endl; 

    int *funPtr1(int, int); 
    int *funPtr2(int, int); 

    funPtr1 = sum1; 
    funPtr2 = mul1; 

    cout << funPtr1(a,b) << endl; 
    cout << funPtr2(a,b) << endl; 

    system("PAUSE"); 
    return 0; 
} 
 
38 assignment of function `int* funPtr1(int, int)' 
38 cannot convert `int()(int, int)' to `int*()(int, int)' in assignment 

Tâche 2 est de créer tableau de pointeurs vers les fonctions nommées tabFunPtr. Comment faire ça ?

+2

Dev-Cpp est vieux et non maintenu. Vous devriez essayer Code :: Blocks. http://www.codeblocks.org/ –

+0

DevC++ est une ancienne crock de merde. Vous avez besoin d'un compilateur plus récent. – Puppy

Répondre

15

Au lieu de int *funPtr1(int, int) vous avez besoin int (*funPtr1)(int, int) de déclarer un pointeur de fonction. Sinon, vous êtes juste déclarez une fonction qui renvoie un pointeur sur un int.

Pour un tableau de pointeurs de fonction, il est probablement plus facile de créer un typedef pour le type pointeur de fonction, puis de déclarer le tableau à l'aide de ce typedef.

E.g.

funPtr_type array_of_fn_ptrs[]; 
1

Cette int *funPtr1(int, int);déclare une fonction .

Cette int (*funPtr1)(int, int);définit un pointeur de fonction .

Cette typedef int (*funPtr1)(int, int);définit un type de pointeur de fonction .

Si vous pensez que est source de confusion, essayez de définir un pointeur vers une fonction qui renvoie un tableau de pointeurs vers les fonctions membres ... La syntaxe de déclaration de C est un cauchemar.

Questions connexes