假设我有main.cpp
,file.h
和file.cpp
。 file.cpp
实现file.h
中的所有原型,而main.cpp
包含file.h
。
非常简单的结构。我想知道如果我在main.cpp
中声明了一个静态全局变量,那么在实现file.cpp
中的所有功能时是否可以访问此类变量?快速尝试似乎并非如此……我什至无法编译它。
但是有可能解决这个问题吗?
请澄清一下我有
file.h:
#ifndef __FILE_H
#define __FILE_H
#include <iostream>
void my_func();
#endif
file.cpp
#include "file.h"
using namespace std;
void my_func() {
//do something with my_static_var
}
和main.cpp
#include "file.h"
static int my_var = 0;
int main(int argc, char** argv) {
my_func();
return 0;
}
假设不涉及任何课程
答案 0 :(得分:1)
具有内部链接的变量只能从其翻译单位(通常表示其源文件)中的范围进行引用。用static
关键字声明的变量具有内部链接。
具有外部链接的变量可以从其他翻译单元(其他源文件)中引用。如果变量不在匿名名称空间中,并且具有以下条件,则该变量具有外部链接:
extern
关键字声明,或my_var
),并且没有用const
和static
声明(与问题中的my_var
不同)。答案 1 :(得分:1)
不。这里的static
的意思是“不要让我做”您要尝试做的事情。它通过内部链接使该对象对该翻译单元私有。
删除static
,尽管您应该考虑避免使用全局变量,但是您会很高兴(在其他地方使用extern
声明将其纳入范围)。