2012-04-18 134 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的定义在哪里,它看起来像什么? – 2012-04-18 08:12:17

+0

是所有这些位于相同的文件(以及如何建立它)? – moooeeeep 2012-04-18 08:12:20

+3

这是一个链接器错误,这意味着链接器无法找到该函数的定义。你在项目中使用过名称空间吗?如果有任何问题,请检查一下。拼写错误,或者您使用了不同的名称空间来进行声明和定义? – Nawaz 2012-04-18 08:12:51

回答

1

你没有执行链接到你的可执行文件。这不是关于函数指针。这就是你编译源代码的方式。

+0

啊我明白了。我有一个怪异的配置在我的日食,其中我有一个公共文件夹内的两个构建配置,我有 scriptSRC/scriptMain.cpp - >包含主要功能,实际上确实工作 – 2012-04-18 08:33:30

+0

和 scriptSRC/tst/scriptTest .cpp - >一组单元测试,以确保事情的工作。 threadCreator.cpp是真正的功能的一部分,但我想测试它,所以我试图包括“../path到真正的src”... 对于那些谁知道我是什么谈到,我的构建配置为: 脚本:编译scriptSRC中的内容而不是scriptSRC/tst scriptTest:编译scriptSRC/tst中的内容。没有为scriptSRC配置它。 谢谢你们。对不起,我错过了,它更像是一个人才流失,我一直在工作几个小时.... – 2012-04-18 08:45:38

+0

我修改了项目配置 - >属性 - > C/C++常规 - >路径和符号 - >源地址 我移动了在scriptSRC/src中运行的实际构建src和scriptSRC/tst中的测试,并确保测试配置找不到src的主体,但会找到其余的.cpp文件它是为了测试所需的,并且我确定了src main的相同。 – 2012-04-18 09:04:32