首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

名称空间的有关问题:名称多重定义

2013-06-26 
名称空间的问题:名称多重定义//file1:head.h#ifndef HEAD_H#define HEAD_Hnamespace space{int ivoid tes

名称空间的问题:名称多重定义


//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;
就可以了。

热点排行