我目前有一个头文件,包含多个头文件和源文件。头文件看起来像这样
File:External.h
#ifndef EXTERNAL_H
#define EXTERNAL_H
#include "memory"
static int pid=-1;
#endif // EXTERNAL_H
这是我当前场景的简化,只是为了检查我是否错了。现在假设我有两个类foo
和bar
。这是我注意到的行为。
#include "External.h"
void foo::someMethod()
{
pid =13; //Change the value of pid;
bar_ptr = new bar();
}
//bar constrcutor
#include "External.h"
bar::bar()
{
int a = pid; //The value of a is -1 wasnt it suppose to be 13
}
假设一个假设为13的值,特别是因为它是一个静态类型的开放变量(不是结构或类)。
答案 0 :(得分:4)
这是因为每个文件都包含头文件,因此每个编译单元(大致是源文件)都会在其中包含此定义:
static int pid=-1;
因此他们每个人都有自己的副本。
你真的应该这样做:
External.h
// The declaration, so that people can access it
extern int pid;
External.c
// The actual implementation
int pid = -1;