开发平台: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才不会出现错误。