Как мне сослаться на статическую функцию для передачи в качестве параметра? - PullRequest
2 голосов
/ 05 октября 2011

У меня есть статическая функция callback:

static SCDynamicStoreCallBack callback( [params] ){ ... }

В main я звоню

createIPAddressListChangeCallbackSCF(callback, manager, &storeRef, &sourceRef);

Эта функция требует, чтобы в качестве параметра была передана функция обратного вызова. Однако, когда я пытаюсь скомпилировать, я получаю ошибку

error: ‘callback’ was not declared in this scope

callback объявлен в корне файла. Как я должен ссылаться на это из main?

Ответы [ 2 ]

3 голосов
/ 05 октября 2011

Мне кажется, проблема в том, что callback () не определен в том же файле, что и main ().

статические функции (и переменные) не видны в файлах, даже если есть объявление прототипа или extern. Таким образом, либо callback () должен перейти в тот же файл, что и main (), либо он должен потерять свою статичность.

Если обе функции находятся в одном и том же файле, сначала необходимо определить callback (), либо перед main () должен быть его прототип / объявление.

0 голосов
/ 05 октября 2011

Цитирование Википедия :

В языке программирования C static используется с глобальными переменными и функции, чтобы установить их область для содержащего файла. В местном переменные, статический используется для хранения переменной в статически выделенная память вместо автоматически выделенной памяти. В то время как язык не диктует реализацию любого типа память, статически выделенная память обычно резервируется в данных сегмент программы во время компиляции, в то время как автоматически выделенная память обычно реализуется как транзитный стек вызовов.

Это означает, что функция static видна только в объявленном файле. Если это не тот файл, в который вы звоните createIPAddressListChangeCallbackSCF, вы столкнетесь с этой ошибкой. Попробуйте, удалив ключевое слово static.

РЕДАКТИРОВАТЬ: также добавить определение функции где-то читаемым в вашем main.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...