关于头文件用于声明而不是用于定义的疑问
我有一个疑问,在c++ primer中一个地方
extern int ival = 0;
double fica_rate;
这里说fica_rate是定义而不是声明,不应该放在头文件,可是我测试了一下,放到头文件,
被几个cpp包含都不会有错误啊,而书上说有两个以上文件包含上述任一个定义都会导致多重定义链接错误
谢谢各位
[解决办法]
一般头文件 都有做 防多重定义的预防措施
如:
#param once
or
#ifndef XXX
#define XXX
....
#endif
[解决办法]
不知楼主是如何测试的,用的什么编译器
$ cat foobar.h foo.cpp bar.cpp
/**
* @file foobar.h
* @brief
*/
#ifndef FOOBAR_H
#define FOOBAR_H
extern int ival = 0;
double fica_rate;
#endif /* FOOBAR_H */
/**
* @file foo.cpp
* @brief
*/
#include <iostream>
using namespace std;
#include "foobar.h"
int main(int argc, char *argv[])
{
return 0;
}
/**
* @file bar.cpp
* @brief
*/
#include <iostream>
using namespace std;
#include "foobar.h"