2010-07-15 4 views
0
typedef void(Object Sender) TNotifyEvent; 

Это то, что я пытаюсь сделать из Delphi на C++, но он не скомпилирован с «type int неожиданным».C++ void type - как?

Результат должен быть что-то я могу использовать так:

void abcd(Object Sender){ 
    //some code 
} 

void main{ 
    TNotifyEvent ne = abcd; 
} 

Как мне сделать такой тип (тип пустоты)? Я не очень хорошо знаком с C++.

+0

'силы основных()' не является стандартным C++. 'main()' всегда возвращает 'int'. –

+0

Вы пытаетесь переключиться на C++ Builder (и использовать те же типы TObject и TNotifyEvent, что и Delphi), или пытаетесь настроить обработчики событий в прямом C++ с дизайном, похожим на Delphi? –

+0

пытался реализовать класс TTimer от Delphi до VC++. –

ответ

1

Если то, что вы хотите, чтобы определить тип функции, которая принимает объект в качестве параметра и не возвращает ничего, синтаксис будет:

typedef void TNotifyEvent(Object Sender); 

EDIT, как ответ на комментарий.

Да, вы можете определить тип функции, и этот тип впоследствии может быть использован в различных контекстах с разными значениями:

TNotifyEvent func;   // function declaration (weird as it might look) 
          // same as: void func(Object Sender); 
TNotifyEvent *fp = func; // function pointer declaration -- initialized with &func 
void func(Object Sender) // cannot use the type when defining the function 
{} 
void foo(TNotifyEvent f); // compiler translates to TNotifyEvent * f 
          // just as 'int a[5]' is converted to 'int *a' 
          // in function parameter lists. 
+1

um ... Можно ли использовать? C++ не может иметь тип, который является функцией, просто указателем на функцию, правильно? –

+0

Интересно, в чем проблема с вопросом - и, следовательно, с нисходящим. @James Curran, да, вы можете. –

+1

Собственно, он может. В C++ существуют типы функций, просто нет переменных типов функций. Но, например. то, что вы поставили в качестве аргумента для std :: function, фактически являются типами функций. См. Здесь: http://ideone.com/fsn3O и здесь http://ideone.com/s8oY9 – jpalecek

4

Вы хотите указатель на функцию, которая принимает объект и возвращает ничего?

typedef void (*TNotifyEvent)(Object Sender); 
1

Нет, потому что в C++ нет общего класса «объект». Вероятно, вам нужен обратный вызов (просмотр событий ...), для которого вам нужен функтор (перегрузка класса operator()) или указатель на функцию.

Ниже приведен пример использования указателя на функцию:

typedef void (*TNotifyEvent)(void *sender); 
+0

Вы можете определить класс объекта и наследовать его другие классы. Это не идиоматический C++, но вы можете это сделать. Конечно, он не будет охватывать какие-либо системные или внешние классы. –