我对编程一般和特别是C++还很新。我使用以下文件制作了一个程序:
my.h
extern int foo;
void print_foo();
my.cpp
#include <iostream>
#include "my.h"
void print_foo(){
std::cout << "foo = " << foo <<std::endl;
}
use.cpp
#include "my.h"
int main(){
int foo = 7;
print_foo();
}
当我尝试编译它时,我会收到错误消息“未定义对foo的引用”,但是当我在main()函数外定义foo时,它可以正常工作。为什么会这样?
use.cpp
#include "my.h"
int foo;
int main(){
foo = 7;
print_foo();
}
int foo = 7;
是一个局部变量,它只在main
函数中有效。它与同名的extern
变量不是同一个东西,因为后者从未被定义。如果想了解词法作用域、声明和定义等相关知识,可以参考一本好书。 - molbdniloextern int foo;
声明了变量 foo,但没有定义它。 - M. Yousfimain()
中的那个不算。 - user207421extern
或static
对象入手?它们是大的“不行”的。它们的使用情况限定在特定情况下,而且好的实现不会在 API 中使用它们。 - Red.Wave