Open bosthhe1 opened 1 year ago
这时候就想到用静态成员来解决这个问题
#include<iostream>
using namespace std;
static int Count = 10;
void func();//打印Count的地址
cpp1
#pragma once
#include"head.h"
void func()
{
cout << &Count << endl;
}
cpp2
#include"head.h"
int main()
{
func();
cout << &Count << endl;
return 0;
}
虽然程序不报错了,但是static的变量在不同的obj文件中存在不同的地址,说明存在两份statci变量
使用extern函数,是Count的作用域扩大
head.h
#include<iostream>
#include<windows.h>
#include<functional>
using namespace std;
extern int Count;
void func();
#pragma once
#include"head.h"
int Count = 10;//注意这里的声明的格式,和初始化不一样
void func()
{
cout << &Count << endl;
}
cpp2
#include"head.h"
int main()
{
func();
cout << &Count << endl;
cout << Count << endl;
return 0;
}
extern函数是声明函数或者全局变量的作用范围的关键字,其声明的函数变量可以在本模块中和其他模块中使用
在两个及其以上文件进行链接的时候,由于都包含了相同的头文件,编译的时候,会实例化出两个Count,所以链接的时候,Count重命名