名称空间的问题:名称多重定义
//file1:head.h
#ifndef HEAD_H
#define HEAD_H
namespace space
{
int i;
void test();
};
#endif
//file2:test.cpp
#include "head.h"
#include <iostream>
void space::test()
{
std::cout<<"using variable cout is ok!";
}
//file3:main.cpp
#include <iostream>
#include "head.h"
int main()
{
space::i=1;
std::cout<<"i="<<space::i;
return 0;
}
三个文件一起编译时提示 int space::i 多重定义。
既然如此,为什么头文件iostream被多个文件包含时,cout可以到处使用?那是怎么实现的呢?
[解决办法]
鼠标点到 cout 上面, 右键->转到定义 就看到了.
头文件里面用 extern 声明, 在一个 cpp 中进行定义.
[解决办法]
好久不用全局变量,已经快忘光了。
全局变量声明必须加上extern,否则就是定义。声明可以有很多,但定义只能有一个。
//file1:head.h
#ifndef HEAD_H
#define HEAD_H
namespace space
{
extern int i;
void test();
};
#endif
这里编译就会出现“找不到定义”错,然后在test.cpp或main.cpp其中之一加上:
int space::i = 0;
就可以了。