代码:
head.h:
#include <iostream>
namespace mySpace
{
class Out
{
public :
void print();
private :
protected :
};
Out o;//这里定义的变量
namespace mySpace_Inner
{
class Inner
{
public :
void print();
private :
Out o;
protected :
};
}
}
head.cpp:
#include "head.h"
namespace mySpace
{
void Out::print()
{
std::cout << "I'm out!" << std::endl;
}
namespace mySpace_Inner
{
void Inner::print()
{
std::cout << "I'm Inner!" << std::endl;
o.print();
std::cout << "endl" << std::endl;
}
}
}
main.cpp:
#include <cstalib>
#include "head.h"
int main()
{
mySpace::mySpace_Inner::Inner i;
mySpace::o.print();//报错
system("pause");
}
按照上面的方式在命名空间里面定义一个Out的变量,在main.cpp里面使用的时候将会报o变量重定义错误,原因如下:
这里一共创建了三个文件,一个头文件,两个cpp文件,其中head.cpp包含了head.h,而main.cpp也包含了head.h,而Out o这样定义变量属于声明并定义,所以这个头文件被包含了几次这个o变量将被定义了几次,所以如果要改变的话就只能将Out o这样定义变成extern Out o;这个时候就不是声明并定义了,而只是声明。然后在head.cpp文件中再定义一下这个Out o,即可正常使用。