2011-11-22 60 views
-1

我需要使用一些帶有附加布爾標誌的函數指針。 我試過以下,但它不會編譯。 任何人都可以幫忙嗎?C:使用二維數組和函數指針

int handler1(int mix) { 
    ... 
    return 0; 
} 
int handler2(int mix) { 
    ... 
    return 0; 
} 
int handler3(int mix) { 
    ... 
    return 0; 
} 

typedef int (*my_handler)(int mix); 

typedef struct { 
    my_handler handler, 
    bool mix_handler, 
} handle_pair; 

static handler_pair handlers[] = { 
    { handler1, FALSE }, 
    { handler2, TRUE }, 
    { handler3, FALSE }, 
    { NULL, FALSE }, 
}; 
+1

首先,你會得到什麼錯誤?其次,在C中沒有本地類型'bool',你是否包含''? –

回答

0

試試這個:

#include <cstdio> 

int handler1(int mix) { 
    //... 
    return 0; 
} 
int handler2(int mix) { 
    //... 
    return 0; 
} 
int handler3(int mix) { 
    //... 
    return 0; 
} 

typedef int (*my_handler)(int mix); 

typedef struct { 
    my_handler handler; 
    bool mix_handler; 
} handle_pair; 

static handle_pair handlers[] = { 
    { handler1, false }, 
    { handler2, true }, 
    { handler3, false }, 
    { NULL, false }, 
}; 

,並在下一次顯示了錯誤,並指定編譯器,操作系統等,這與VISUALC測試++ 9

+0

請問,這個問題被標記爲C而不是C++ –

+0

但是C包含'bool'數據類型嗎? – INS

+1

如果包含'stdbool.h',C99就有'bool'。如果你不這樣做,它只有'_Bool'。 –

1

我的猜測是,它的這些線是給你一個問題:

typedef struct { 
    my_handler handler, 
    bool mix_handler, 
} handle_pair; 

你應該結束聲明;,即使在結構中。就像這樣:

typedef struct { 
    my_handler handler; 
    bool mix_handler; 
} handle_pair; 

而且,你的typedef名稱handle_pair但聲明與handler_pair類型的數組。 「處理」還是「處理程序」?

1

你的struct typedef是錯誤的,你用分號分隔聲明,而不是像在普通代碼中那樣用結構聲明中的逗號分開。

它應該是:

typedef struct { 
    my_handler handler; 
    bool mix_handler; 
} handle_pair; 

如果我註釋掉...線,並堅持以下在文件的頭:在

#include <stdbool.h> 
#include <unistd.h> 
#include <stdlib.h> 

#define TRUE 1 
#define FALSE 0 

,並更改handler_pairhandle_pair您靜態聲明,它編譯。