1

我有这个简单的例子,但我无法编译:

三个文件:my.hmy.cppuse.cpp

//my.h
extern int foo;
void print_foo();
void print(int);

//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;
}

//use.cpp
#include <iostream>
#include "my.h"

int main(){
    foo = 7;
    print_foo();
    print(99);

    return 0;
}

当我尝试编译它时,我收到三个错误: LNK2001: extern "int foo".. LNK2019: extern "int foo".. LNK1120:

我究竟做错了什么?谢谢你的帮助

4

1 回答 1

6

您没有任何全局变量的定义。在您的任何.cpp文件中,但仅在其中一个文件中,您应该添加以下内容:

int foo = 0; // This is a definition

您的声明

extern int foo; // This is a declaration

仅告诉编译器存在这样的全局变量,但随后没有您实际定义它的地方。因此,链接器最终会抱怨您有一个未定义的引用符号。

于 2013-03-09T22:15:15.493 回答