我有这个简单的例子,我无法编译:
三个文件:my.h,my.cpp和use.cpp:
//my.h
extern int foo;
void print_foo();
void print(int);
Run Code Online (Sandbox Code Playgroud)
//my.cpp
#include "my.h"
#include "../../stb_lib_facilities.h" //inlcudes cout, cin, etc
void print_foo(){
cout << foo << endl;
}
void print(int i){
cout << i << endl;
}
Run Code Online (Sandbox Code Playgroud)
//use.cpp
#include <iostream>
#include "my.h"
int main(){
foo = 7;
print_foo();
print(99);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试编译它时,我得到三个错误:LNK2001:extern"int foo".. LNK2019:extern"int foo".. LNK1120:
我究竟做错了什么?谢谢你的帮助
您没有全局变量的任何定义.在您的任何.cpp文件中,但只在其中一个文件中,您应该添加以下内容:
int foo = 0; // This is a definition
Run Code Online (Sandbox Code Playgroud)
你的声明:
extern int foo; // This is a declaration
Run Code Online (Sandbox Code Playgroud)
只告诉编译器存在这样的全局变量,但是没有实际定义它的地方.因此,链接器最终会抱怨您有一个未定义的引用符号.
| 归档时间: |
|
| 查看次数: |
392 次 |
| 最近记录: |