2010-02-04 26 views
13

Po pierwsze, mam takie funkcje.Jak zadeklarować tablicę wskaźników funkcji?

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

Następnie tworzę typedef na tablicy:

void (*FP)(); 

Jeśli piszę normalną tablicę wskaźników funkcji, powinno być coś takiego:

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

chcę uczyń go stałą tablicą, używając const przed "FP", ale mam te komunikaty o błędach:

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

PD: Przepraszam, mój zły angielski.

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}; 

Mój kod jest bardziej duże i złożone, to jest podsumowanie

+1

Jego zawsze lepiej napisać rzeczywisty kod niż powiedzenie „Następnie tworzę typedef na tablicy:” lub „za pomocą const przed«FP»”. – sand

+0

@Facon: Używasz lekcji? Czy mógłbyś tutaj opublikować cały kod? – Jagannath

+0

Edytowałem post. – Facon

Odpowiedz

8

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

Czy tęskniłeś za typedef przed void?

Po pracach nad moim kompilatorem.

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

typedef void (*FP)(); 


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

EDIT

(po obejrzeniu swoje edycje)

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

Używałem klasy ..., zajmuje mi ten sam błąd przy użyciu stałej tablicy FP [3] = ... lub przy użyciu FP const array [3] = ... – Facon

+0

Pokaż nam cały * aktualny * kod. –

+0

Edytowałem post. – Facon

2
typedef void (*FPTR)(); 

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

Jeśli chcesz sama tablica być const:

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

Czy pisze 'FP const' lub' const FP' nie robi różnicy. Zobacz to pytanie: http://stackoverflow.com/questions/1808471/is-const-lpvoid-equivalent-to-void-const –

+0

@tib: Chociaż zgadzam się, nie jestem pewien, czy widzę znaczenie Twojego komentarza. Być może tylko obserwujesz, w tym przypadku, okrzyki. –

+0

Byłem trochę zdezorientowany, ponieważ twoja odpowiedź i pytanie są zasadniczo identyczne. Tylko, że twoja jest tablicą nie-członkowską (i że masz stałą w innym miejscu). Więc nie widzę znaczenia twojej odpowiedzi. Ale może po prostu obserwujesz to samo, tak na zdrowie. –

3

Z którego kompilatora korzystasz? Działa to na 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 ++ Komponentu GNU – Facon

4

bez typedef:

void (*const fp[])() = { 
    f1, 
    f2, 
    f3, 
}; 
Powiązane problemy