[英]Resolve linker errors in GNU for redeclaration
我有以下實現:
A的標題:
class A
{
public:
foo();
};
A 有自己的 .cpp 文件,其中包含 foo() 的實現
//B頭
#include "A.h"
class B
{
public foo();
};
注意:B 沒有自己的標題
現在在 C.cpp 類中,我想在 C.cpp 中重用 A 的標頭和 Bo So 的實現,我這樣做:
//C.cpp
#include "A.h"
....
B b;
b.foo();
..
當我編譯上面的代碼時,我一定會得到函數 foo() 的重新聲明錯誤。 我想知道是否有任何方法可以告訴 GNU 編譯器取 Bo 並省略 Ao .. 或者告訴編譯器考慮包含實現的 make 文件中的第一個對象並忽略其余對象?
我正在使用 GNU v2.16
你的問題是關於A
重新聲明,因為在C.cpp
它會看到 2 個A
聲明,一個通過Ah
另一個通過Bh
,所以只需在標題保護中保護Ah
以避免多次包含它,通常你應該始終保護你的標題:
#ifndef HEADER_A_h_INCLUDED
#define HEADER_A_h_INCLUDED
class A {...};
#endif
現在,如果您多次包含Ah
該守衛將使第二次包含成為空!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.