2013-07-25 61 views
0

在我得到答案之前:「將您想要測試的代碼移動到另一個.cpp文件」我無法做到這一點。我曾嘗試使用預處理#if TESTING_SUITE ... #endif但是,這並不工作,我仍然得到:是否可以在已經有主函數的cpp文件上運行測試?

g++ -lmxml -lccpunit -o pic pic.cpp wmcc.cp test.cpp 

一:'主

我編譯我的代碼就像

多重定義在pic.cpp中有一個主體,而在test.cpp中有另一個主體。有沒有解決的辦法?

UPDATE

在我TEST.CPP:

#define TESTING_SUITE_1 

在我pic.cpp:

#ifndef TESTING_SUITE_1 
    int main(... 
#endif 

不工作

+0

你應該能夠'#ifdef'你現存的'主()'。當你嘗試時你可能做錯了什麼。你是怎麼做到的? – BoBTFish

+0

爲什麼你不能將'main'移出到不同的翻譯單元? –

+0

@DavidRodríguez-dribeas因爲我有很多其他的源代碼使它複雜化,這只是問題的一小部分。我本來應該這樣做,但我現在不能。 BoBTFish我更新了我的Q – user622469

回答

2

您可以指定另一個切入點你的鏈接器。 對於MS CL.EXE無論是在代碼:(對不起,我沒看到你用gcc)

#pragma comment(linker, "/entry:alternative_main") 

或通過項目屬性頁:

Configuration Properties > 
    Linker > 
    Advanced > 
     Entry Point 
在命令行

或直接:

/entry:alternative_main 

對於GCC它是下面的命令行開關:

-Wl,-ealternative_main 

其他編譯器請參考手冊。

+0

我得到:'main'的多重定義。無法在manpages中找到版本? – user622469

+0

'-Wl,option'將'option'傳遞給鏈接器(我假設爲ld)。 '-e'是'-entry'的快捷鍵,並指定鏈接器應該使用的入口點。這些選項是非常標準的,因爲...我不知道,很長一段時間:p –

+0

哦,我現在明白了。我沒有把test.cpp裏的'main'改成'alternative_main',因爲我不明白 - 但是在你的解釋之後很清楚。謝謝。 – user622469

0

您可以通過編輯做得一樣

g++ -Dmain=main_pic_moved -c pic.cpp 
g++ -Dmain=main_wmcc_moved -c wmcc.cp 
g++ -lmxml -lccpunit -o pic pic.o wmcc.o test.cpp 
+0

我得到:'main_pic_moved(int,char **)的多重定義。縱觀--Dmain雖然。 – user622469

+0

有了這些確切的線條?我看不到這會發生。 – hivert

相關問題