簡體   English   中英

解決 GNU 中的鏈接器錯誤以進行重新聲明

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM