我编写了一个程序来测试C ++中的 static 和 extern 关键字。
source1.cpp
#include "Header.h"
using namespace std;
static int num;
int main(){
num = 1;
cout << num << endl;
func();
}
source2.cpp
#include "Header.h"
using namespace std;
extern int num;
void func(){
num = 100;
cout << num << endl;
}
Header.h
#ifndef HEADER_H
#define HEADER_H
#include <iostream>
void func();
#endif
当我编译这个程序时,它给我一个链接错误。
error LNK2001, LNk1120 unresolved externals.
导致此链接错误的原因是什么?
答案 0 :(得分:2)
此链接错误是由于 num 变量声明为静态变量而导致的。
即使变量 num 在source2.cpp文件中声明为 extern ,链接器也不会找到它,因为它已被声明为 static 在source1.cpp中。
当您声明变量static时,它是文件的本地; 它具有文件范围。该变量在此文件之外不可用。