解決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