在一个源文件中没问题,分文件编写就出问题了
// 函数声明
void func(void);
static int count = 10; /* 全局变量 */
int main()
{
while(count--)
{
func();
}
return 0;
}
// 函数定义
void func( void )
{
static int i = 5; // 局部静态变量
i++;
std::cout << "变量 i 为 " << i ;
std::cout << " , 变量 count 为 " << count << std::endl;
}
在函数外面定义的static声明的变量是属于文件作用域的,所以main.cpp的count变量在文件外不可访问,如果要作为整个程序的全局变量,需要如下声明:
extern int count = 10; /* 全局变量 */
然后在math.cpp中,使用如下声明:
extern int count;
需要注意,这里不能进行初始化,否则编译器会判定重复定义。
另外,我在VS中这样写仍会报错,原因可能是std名称空间已经由count的定义了,所以在math.cpp的输出语句需要使用::count(加上全局作用域运算符::)。
建议可以看看C++ primer plus,对作用域的描述会更系统些
你只是在main里包含了math,但math中并没有包含main啊,所以math里不认识main中的内容是肯定的