2010-02-04 7 views
13

Tout d'abord, j'ai des fonctions comme celle-ci.Comment déclarez-vous un tableau const de pointeurs de fonction?

void func1(); 
void func2(); 
void func3(); 

Je crée mon typedef pour le tableau:

void (*FP)(); 

Si j'écris un tableau normal de pointeurs de fonction, il devrait y avoir quelque chose comme ceci:

FP array[3] = {&func1, &func2, &func3}; 

Je veux en faire un tableau constant, en utilisant const avant "FP", mais j'ai ces messages d'erreur:

error: cannot convert 'void (*)()' to 'void (* const)()' inialization

PD: Désolé mon mauvais anglais.

EDIT:

x.h

typedef void (*FP)(); 

class x 
{ 
private: 
    int number; 
    void func1(); 
    void func2(); 
    void func3(); 
    static const FP array[3]; 
} 

x.cpp

const FP x::array[3] = {&x::func1, &x::func2, &x::func3}; 

Mon code est plus vaste et complexe, c'est un résumé

+1

Il est toujours préférable d'écrire le code réel que de dire "Je crée mon typedef pour le tableau:" ou "en utilisant const avant "FP"". – sand

+0

@Facon: Vous utilisez une classe? Pourriez-vous poster le code entier ici? – Jagannath

+0

J'ai édité le post. – Facon

Répondre

8

Then I create my typedef for the array: void (*FP)();

Avez-vous manqué typedef avant void?

Suivre les travaux sur mon compilateur.

void func1(){} 
void func2(){} 
void func3(){} 

typedef void (*FP)(); 


int main() 
{ 
    const FP ar[3]= {&func1, &func2, &func3}; 
} 

EDIT

(après avoir vu vos modifications)

x.h

class x; 
typedef void (x::*FP)(); // you made a mistake here 

class x 
{ 
    public: 
     void func1(); 
     void func2(); 
     void func3(); 
     static const FP array[3]; 
}; 
+0

J'utilisais une classe ..., ça me prend la même erreur en utilisant const FP array [3] = ... ou en utilisant FP const array [3] = ... – Facon

+0

Montrez-nous votre code * réel *. –

+0

J'ai modifié le post. – Facon

2
typedef void (*FPTR)(); 

FPTR const fa[] = { f1, f2}; 
// fa[1] = f2; You get compilation error when uncomment this line. 
1

Si vous voulez que le tableau lui-même être const:

FP const a[] = 
    { 
     func1, 
     func2, 
     func3 
    }; 
+0

Qu'il écrive 'FP const' ou' const FP' ne fait aucune différence. Voir cette question: http://stackoverflow.com/questions/1808471/is-const-lpvoid-equivalent-to-void-const –

+0

@ltib: Bien que je sois d'accord, je ne suis pas sûr de voir la pertinence de votre commentaire. Peut-être que vous observez simplement, dans ce cas, les acclamations. –

+0

J'étais juste un peu confus, puisque votre réponse et la question sont fondamentalement identiques. Juste que votre est un tableau non-membre (et que vous avez le const à un autre endroit). Donc, je ne vois pas la pertinence de votre réponse. Mais peut-être que vous observez juste de même, alors applaudissez. –

3

Quel compilateur utilisez-vous? Cela fonctionne sur VS2005.

#include <iostream> 

void func1() {std::cout << "func1" << std::endl;} 
void func2() {std::cout << "func2" << std::endl;} 
void func3() {std::cout << "func3" << std::endl;} 

int main() 
{ 
int ret = 0; 

typedef void (*FP)(); 

const FP array[3] = {&func1, &func2, &func3}; 

return ret; 
} 
+0

g ++ de GNU Compiler – Facon

4

sans typedef:

void (*const fp[])() = { 
    f1, 
    f2, 
    f3, 
}; 
Questions connexes