ссылка на пустоту

У меня есть подозрение, что это может быть проблема из-за компиляторов.

void SetRenderFunction(void (&newRenderFunction(void)));

Это заставляет GCC объявлять, что я «не могу объявить ссылку на« недействительным »».

Теперь я использовал тот же прототип функции (более или менее) в Visual Studio в Windows. В Windows у меня было другое имя функции, и вместо того, чтобы передавать указатель на функцию, которая принимает пустоту, она брала указатель на какой-то другой объект, который мне был нужен.

Если я использую * вместо &, это предотвращает эту проблему, но вместо этого, когда я пытаюсь передать указатель на функцию, я получаю проблемы с приведением типов: он пытается преобразовать его из void (*)() в void* (*)()

Спасибо.


person thecoshman    schedule 12.02.2011    source источник


Ответы (2)


Ну... на это косвенно ответили другие люди. Благодаря Alf и Abyx я заметил, что я сделал неправильно, но поскольку они оба опубликовали сообщения более или менее в одно и то же время, и ни один из них на самом деле не сказал, что было неправильно, просто сказал, как правильно сделать то, что я пытался , я отвечу на старый сам.

Мой вызов функции был:

void SetRenderFunction(void (&newRenderFunction(void)));

Немного, что было неправильно, здесь - - - - - - - - - - - - - - - - - - - - - ^ и - ^

Я должен был заключить набор скобок вокруг &newRenderFunction и параметров для этого указателя на функцию. Вот так:

void SetRenderFunction(void (&newRenderFunction)(void));

Исправление здесь - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ^ - - - - - ^

person thecoshman    schedule 12.02.2011
comment
+1 за ответ на свой вопрос таким образом, который наверняка будет полезен другим. - person Adam Liss; 13.02.2011
comment
Вот почему я это сделал. Я не хотел отвечать сам, но чувствовал, что ответы до сих пор не объясняли, что на самом деле не так с моим кодом, в основном, просто глупая опечатка. - person thecoshman; 13.02.2011

Не удается скомпилировать с помощью Comeau Online. Следовательно, это неправильно.

Ты можешь сделать

void setRenderFunction( void (&newRenderFunction)() );

но лучше сделать

void setRenderFunction( void (*newRenderFunction)() );

потому что нотация указателя более известна и работает также с C.

Ура и чт.,

person Cheers and hth. - Alf    schedule 12.02.2011
comment
эм... не хочу показаться здесь дерьмом, но я знаю, что это неправильно, я был больше после того, как узнал, как это исправить - person thecoshman; 13.02.2011
comment
+1 за первый абзац. Я помню, как пытался сообщать об ошибках компилятора Metrowerks и Microsoft, а также тем, кто настаивал на том, что их компилятор не является ошибочным в соответствии со стандартом, пока я не научился говорить им, что будет делать Комо. (Но Комо поступает не так, как вы!) Они всегда соглашались с вердиктом Комо. :) (За более чем десятилетие я нашел одну ошибку в Comeau. Именно эту. Я нашел десятки в CW, GCC и VC. Десятки в каждой, заметьте. Всем привет EDG.) - person sbi; 13.02.2011
comment
@downvoter: пожалуйста, добавьте объяснение вашего отрицательного голоса, чтобы другие могли видеть, что с ним не так. - person Cheers and hth. - Alf; 13.02.2011