.h文件有问题,它不';似乎没有正确连接 我通过Bjarne Stroustrup的《C++编程原理与实践》学习C++,第一部分的演练是用H文件来显示的。这个练习非常简单,我严格遵守了它,但是当我试图编译时,我总是得到“对foo的未定义引用”。我将在下面写下这三个文件,它们非常短

.h文件有问题,它不';似乎没有正确连接 我通过Bjarne Stroustrup的《C++编程原理与实践》学习C++,第一部分的演练是用H文件来显示的。这个练习非常简单,我严格遵守了它,但是当我试图编译时,我总是得到“对foo的未定义引用”。我将在下面写下这三个文件,它们非常短,c++,linker-errors,C++,Linker Errors,顺便说一句,std_lib_facilities.h是作者包含的一个.h文件,其中包含一些include,如iostream以及“使用命名空间std;”还有一些作者写的你需要经常使用的函数 my.h-包含外部intfoo;无效打印_foo();空白打印(int) my.cpp-包括my.h,定义print_foo()以使用cout打印foo的值,并定义print(int i)以使用cout打印i的值 #include "my.h" #include "std_lib_facilities.h"

顺便说一句,std_lib_facilities.h是作者包含的一个.h文件,其中包含一些include,如iostream以及“使用命名空间std;”还有一些作者写的你需要经常使用的函数

my.h-包含外部intfoo;无效打印_foo();空白打印(int)

my.cpp-包括my.h,定义print_foo()以使用cout打印foo的值,并定义print(int i)以使用cout打印i的值

#include "my.h"
#include "std_lib_facilities.h"

void print_foo()
{
    cout << foo << '\n';
}

void print(int i)
{
    cout << i << '\n';
}
如果这有助于

extern int foo;
extern
意味着在某处有一个名为
foo
int
。但这里没有定义。这只是对
foo
存在的声明,向编译器承诺
foo
将在需要时存在。编译器将继续并允许使用
foo
,即使它还不知道
foo
在哪里

这意味着其中一个cpp文件中必须有

int foo;
定义
foo
并遵守此承诺


您不确定“未定义的对foo的引用”的哪一部分?错误消息再清楚不过了,而且您肯定没有在任何地方定义
foo
。“std_lib_facilities.h”大概是一个包含大量include和
的文件,使用名称空间std尽快停止使用它。引入您不需要的包含只会降低编译器的速度。和
使用名称空间std
会带来惊喜,在头文件中这是一个特别糟糕的主意,因为没有办法逆转它。谢谢!是的,我觉得这是一个相当愚蠢的问题,我只是不确定发生了什么,因为演习实际上告诉了你该做什么。
extern int foo;
int foo;