头文件用于声明而不是用于定义
extern int val = 10; 虽然val声明为extern,但是有初始化值,所以这句话代表一个定义
double fica_rate; 没有extern,代表定义
因为头文件包含在多个源文件中,所以不应该含有变量和函数的定义
请看下面的例子:
demo.h
#ifndef _DEMO_H
#define _DEMO_H
int counter;
int test()
{
return 0;
}
#endif
demo.cpp
#include "demo1.h"
//什么都没有
source.cpp
#include <string>
#include <iostream>
#include "demo1.h"
using namespace std;
int main()
{
}
1>Source.obj : error LNK2005: "int __cdecl test(void)" (?test@@YAHXZ) already defined in demo1.obj
1>Source.obj : error LNK2005: "int counter" (?counter@@3HA) already defined in demo1.obj
报错 重定义