2012-04-18 4 views
3

Я пытаюсь передать указатель на функцию, но я продолжаю получать ошибку компилятора. Обычно я не передаю указатели функций, но это требует этого. Я думаю, что вам нужно только увидеть объявления, чтобы увидеть, что я делаю неправильно.C++ передающие функции указатели в качестве аргументов

в заголовочном файле у меня есть:

pthread_t * createThread(void *(*func)(void *), string arg) 

и в реализации это то же самое:

pthread_t * createThread(void *(*func)(void *), string arg) 

В вызове этой функции я делаю: CreateThread (& прекращение функции , «бежал снова»)

И декларация о возможности:

void *afunction(void *ptr) //(no header, same for both declaration and implementation). 

но компилятор плюет это:

Undefined symbols for architecture x86_64: 
    "createThread(void* (*)(void*), std::basic_string<char, std::char_traits<char>, std::allocator<char> >)", referenced from: 
     spawnSingleThreadTest()  in threadTests.o 
+0

Адрес, имя, кем вы являетесь? Что такое определение createThread? –

+0

все это находится в том же файле (и как его построить)? – moooeeeep

+3

Это ошибка компоновщика, что означает, что компоновщик не может найти определение функции. Вы использовали пространство имен в своем проекте? Проверьте это, если с этим возникли проблемы. Ошибка орфографии, или, возможно, вы использовали другое пространство имен для объявления и определения? – Nawaz

ответ

1

Вы не связывал реализацию на свой исполняемый файл. Речь идет не о указателе функции. Это как вы скомпилировали ваш источник.

+0

А я вижу. У меня есть странные конфигурации в моем затмение, где у меня есть две конфигурации сборки в общей папке, где у меня есть scriptSRC/scriptMain.cpp -> содержит основную функцию, которая на самом деле делает реальную работу –

+0

и scriptSRC/TST/scriptTest .cpp -> набор модульных тестов, чтобы убедиться, что все работает. ThreadCreator.cpp является частью реальной функциональности, но я хочу проверить его, поэтому я пытался включить «../path в real src» ... Для тех из вас, кто знает, что я говоря о, мои конфигурации сборки были: скрипт: скомпилировать то, что находится в scriptSRC, а не в scriptSRC/tst scriptTest: скомпилировать то, что находится в scriptSRC/tst. не настроил его для scriptSRC. Спасибо вам, ребята. Извините, я пропустил это, это было больше утечки мозгов, я работал часами .... –

+0

Я исправил его, отредактировав конфигурации в проекте -> свойства -> C/C++ Общие -> Пути и символы -> Source Location Я переместил фактическую сборку src, которая работает в scriptSRC/src, и тесты в scriptSRC/tst и убедитесь, что тестовая конфигурация не найдет основную часть src и все же найдет остальные .cpp-файлы что это необходимо для тестирования, и я убедился в том же самом для src main. –