解决 error C2374 : g_num : redefinition : multiple initialization
声明类型:
1、需要建立存储空间的(如int a;),称为定义性声明,简称定义;
2、不需要建立存储空间(如extern int a;),称为引用性声明,简称声明。
问题描述:如果在.h文件中定义g_num,多个.cpp文件想共用g_num,因此都包含该.h文件,会造成g_num重复定义。
解决方案:g_num在.h里面声明(extern int g_num;),需要在其中一个.cpp文件定义(int g_num;)。
// -------------a.h-------------
#ifndef A_H
#define A_H
int extern g_num; // 声明g_num
// int g_num = 10; // error C2374: 'g_num' : redefinition; multiple initialization
void FuncA();
void FuncB();
#endif
// -------------a.cpp-------------
#include "a.h"
int g_num = 1; // 定义g_num,值为1
void FuncA()
{
g_num = 11; // g_num赋值为11
}
// -------------b.cpp-------------
#include "a.h"
void FuncB()
{
g_num = 111; // g_num赋值为111
}
// -------------main.cpp-------------
#include "a.h"
int main()
{
// g_num的值为1
FuncA();
// g_num的值为11
FuncB();
// g_num的值为111
return 0;
}