2012-04-18 78 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