開發平台:Xcode7.2
小弟最近開始接觸到namespace這個東西。由於對它不是很了解,只從書上大概了解他的
語法,我假設他的寫法跟class一樣是在.h做declaration 然後在.cpp做implementation
我看到很多書或是網站也都是這樣寫。但是我在.h對變數做宣告的時候,假如不加上
extern或static這兩個修飾詞的話都會出現編譯錯誤:duplicate symbol for
architecture x86_64
想請教一下為什麼會這樣?他跟class之間有什麼差別嗎?除了不能實體化之外。或著說
在compile時候compiler處理他跟處理class是什麼不同的方式啊。
ex:
__________Supplement.h____________
#ifndef Supplement_hpp
#define Supplement_hpp
#include <stdio.h>
#include <iostream>
#include <map>
using namespace std;
namespace MyNameSpace {
int i;
}
#endif /*Supplement_hpp */
_____________main.cpp______________
#include <stdlib.h>
#include "Supplement.hpp"
using namespace std;
int main(int argc, const char * argv[]) {
cout << MyNameSpace::i << endl;
}
上面這樣就會出現編譯錯誤。必須要把 int i 改成 extern int i才不會出現錯誤。