2011-10-22 22 views
1

如何重用已存在主方法的文件中的類?例如。我想用結構foo的另一個開發人員在Foo.cpp中在我自己的程序,main.cpp中寫道:重用main()文件中的類

//-- foo.cpp -- 
struct foo { 
    int bar; 
}; 
int main() { 
    return 0; 
} 
//-- end foo.cpp -- 

//-- main.cpp -- 
#include "foo.cpp" 
int main() { 
    foo f; 
    f.bar = 1; 
    return f.bar; 
} 
//-- end main.cpp 

的main.cpp不會編譯使用G ++ 4.4.4,給人的錯誤:

main.cpp: In function "int main()": 
main.cpp:2: error: redefinition of "int main()" 
foo.cpp:4: error: "int main()" previously defined here 

我無法從foo.cpp中提取主要方法,因爲我不控制該代碼。在我正在處理的實際代碼庫中,struct foo更復雜,所以我不能將它複製到main.cpp中,因爲它不可維護。

+0

將類和'main'函數分成兩個單獨的文件。你爲什麼試圖以其他方式做到這一點? –

+0

你錯過了這一點,@ChrisLutz - 他沒有寫'foo.cpp'。它包含一個他想要使用的課程,以及一個'main'。 –

+0

@ ErnestFriedman-Hill - 我以爲這是代碼庫的全部內容。我現在意識到這可能是一個不正確的假設,但我不認爲這會改變答案應該是什麼。 –

回答

1

一個標題

foo.h 
#ifndef _STRUCT_FOO 
#define _STRUCT_FOO 
struct foo { 
    int bar; 
}; 
#endif 

內部結構FOO包括無論你需要它。

1

在編譯foo.cpp時,使用預處理器定義將main擴展爲一個擴展爲例如not_main的宏;即

g++ -Dmain=not_main foo.cpp 
+2

也可能是'namespace baz {'/'#include「file.cpp」'/'};'這樣''baz :: foo'指向結構體,'baz :: main'將是另一個主要函數。如果'foo'的所有代碼都在'file.cpp'中,它應該可以工作。 –

+0

我對這些黑客不寒而慄,但有時你必須做你必須做的事情。如果你很幸運,你會後悔:)命名空間解決方案比重新定義主要更好。 – ObscureRobot

+0

如果'#include「file.cpp」''''''''''''''''''''''''''''''''''''''''''''因爲它直接在另一個文件中編譯'file.cpp',因此它可能被編譯。 –

1

非編碼解決方案:請與維護相關代碼的人交談。爲他們重構它!

+0

+超過9000,會再次使用。 –

+0

在* most *編程文化中,酒精的傳統是傳統的:) – ObscureRobot

+0

我會,但我認爲她睡着了,我希望今晚:) – xnx

相關問題