2015-12-28 1 views
2

Так что я пытался сделать свой собственный PAWN sdk для языка программирования D, я знаю, что уже есть PAWN sdk для D, но я просто хочу попытаться сделать это сам.Array структуры в C до D

У меня странная проблема, когда я преобразовать этот C код D:

struct tagAMX; 
typedef cell (*AMX_NATIVE)(struct tagAMX *amx, cell *params); 

typedef struct tagAMX_NATIVE_INFO { 
const char *name; 
AMX_NATIVE func; 
} AMX_NATIVE_INFO; 

и я преобразовать его в D-код:

struct AMX; 
alias AMX_NATIVE = cell function(AMX* amx, cell* params); 

struct AMX_NATIVE_INFO { 
    immutable(char)* name; 
    AMX_NATIVE func; 
} 

ли я написал это правильно ?, если код выглядит нормально, просто игнорируйте его.

Основная проблема здесь: в C

AMX_NATIVE_INFO PluginNatives[] = 
{ 
    {"HelloWorld", HelloWorld}, 
    {0, 0} 
}; 

Как я пишу, что на D? я попытался с:

AMX_NATIVE_INFO[] NativeInfo = 
[ 
    ["HelloWorld", HelloWorld], 
    [0, 0] 
]; 

Это просто дать мне ошибку:

function test.HelloWorld (AMX* amx, int* params) is not callable using argument types() 
cannot implicitly convert expression ([0, 0]) of type int[] to AMX_NATIVE_INFO 

ответ

4

Попробуйте

AMX_NATIVE_INFO[] NativeInfo = 
[ 
    AMX_NATIVE_INFO("HelloWorld", &HelloWorld), 
    AMX_NATIVE_INFO(null, null) 
]; 

или

AMX_NATIVE_INFO[] NativeInfo = 
[ 
    {"HelloWorld", &HelloWorld}, 
    {null, null} 
]; 

Читать this для получения более подробной информации о структурах.

+0

Спасибо человеку, действительно, я пробовал и не работал, но я пробую его снова, увидев ваш ответ, затем работает lol, спасибо! –

+2

Возможно, вы забыли принять адрес функции ('&'). Обратите внимание, что с D [дополнительные круглые скобки] (http://dlang.org/spec/function.html#optional-parenthesis) просто запись 'HelloWorld' означает вызов этой функции без аргументов. – sigod

Смежные вопросы