解决tihs问题有多种方法,但是,让我试着说明为什么会出现此错误。
每个函数都有一个与其相关的值类型。这意味着,每个函数都会评估某种类型的值。这由其返回值来表示。
例如:
int foo(/*whatever*/);
的计算结果为一个int。所以foo(/*whatever*/)
可用于任何地方int
预计。例如像int a = b + foo(/*whatever*/)
。
Simlarly float bar(/*whatever*/);
的计算结果为float
,因此bar(/*whatever*/)
可用于预计浮标的任何位置。例如像float a = b + bar(/*whatever*/)
。
然而返回void
像void foobar(/*whatever*/)
的函数,计算结果为void
和不能使用其中某些类型的(比如整数,浮点等等)的一个值预期。
现在来代码。这条线在main
功能有问题:
int main()
{
Test2(Test(L"Hello", L"Testing")); /* Issue here */
return 0;
}
这里要传递Test(L"Hello", L"Testing")
作为参数传递给Test2
。现在请记住,Test(/*whatever*/)
的计算结果为void
,因为Test
返回一个空格。
所以,你在做什么在该行是一样的东西
Test2(/*something that evaluates to a void*/);
然而,Test2
expectes一个void (*)(wchar_t*, wchar_t*)
,这是一个pointer to a function that returns void
,这是从void
不同。
所以发生了什么事情是,编译器看到你正在传递一个void
在一个void (*) (wchar_t*, wchar_t*)
的地方,所以它正确地指出了错误。
可以有不同的方法来解决在其他答案中提到的这个问题。
来源
2016-07-05 21:55:24
sps
根据你想要做什么,lambda可能就足够了。 – chris
你试图达到的是什么?正如你所看到的,你的代码是无效的C,所以它不是你的意图的有用证明。 –
πάνταῥεῖ的答案是我想要达到的目标,但我希望有一种不同的方式来做到这一点,比如在C++中使用模板 – user1304765