簡體   English   中英

在命名空間中聲明和定義函數?

[英]Declare and Define a Function in a Namespace?

我有以下標題:

#ifndef MY_H_
#define MY_H_

namespace A {
void f() {
// do something
}
}
#endif

但是,當我編譯時,出現諸如A :: f()的多個定義之類的錯誤。 我認為#ifndef檢查足以避免在1個翻譯單元中出現重復的定義。 也許我想念什么?

提前致謝。

在函數定義之前添加inline說明符:

#ifndef MY_H_
#define MY_H_

namespace A {
inline void f() {
// do something
}
}
#endif

您應該在頭文件中聲明函數,但在cpp文件中定義它們。 如果您包含來自多個翻譯單元的頭文件(最有可能),那么將有多個實現可用於不同的翻譯單元。 每個包含此標頭的cpp文件都將實現f 這樣,如果要調用f ,則它是模棱兩可的。 通過將實現放入cpp文件中,可以通過這種方式鏈接和使用它。 但是只有一種實現方式可以使它明確。

因此,您的頭文件應為:

#ifndef MY_H_
#define MY_H_

namespace A
{
    void f(); // declaration only
}

#endif

和您的源文件:

#include "myHeader.h"

namespace A
{
    void f()
    {
        // some implementation
    }
}

那你應該沒事的 通常,您將使用所有功能來執行此操作。 唯一的例外是inline函數/方法或模板,但這不在此問題的范圍內。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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