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