我通过Bjarne Stroustrup的“编程原理和使用C++编程”学习C++,本章的练习的第一部分是展示使用的.h文件。演练非常简单,我把它跟在信上,但是当我尝试编译时,我总是收到'未定义的foo引用'。我将把这三个文件写在下面,它们超短。与.h文件有关的问题,它似乎没有正确链接
顺便说一句,std_lib_facilities.h是作者包括的.h文件,它包含一些像iostream一样的“包含”,以及'using namespace std;'以及作者写到的一些函数,您需要不时使用
my.h - 包含extern int foo; void print_foo(); void print(int);
#ifndef MY_H
#define MY_H
extern int foo;
void print_foo();
void print(int);
#endif
my.cpp - 包括my.h限定print_foo()打印使用cout和打印FOO的值(int i)以使用COUT
#include "my.h"
#include "std_lib_facilities.h"
void print_foo()
{
cout << foo << '\n';
}
void print(int i)
{
cout << i << '\n';
}
使用打印i的值。 CPP - 包括my.h定义main()中foo的值设定为7,并使用print_foo(打印)和使用打印()
#include "my.h"
int main()
{
foo = 7;
print_foo();
print(99);
}
我使用该操作系统是打印的99值Linux如果有帮助
“到foo未定义参考”哪一部分的你不知道?错误信息不能更清晰,你肯定没有在任何地方定义'foo'。 –
“std_lib_facilities.h”大概是一个包含大量包含和“使用命名空间标准”的文件;尽快停止使用它。引入包括你不需要拖慢你的编译器。 '使用名称空间标准'可能会导致意外,并且在头文件中是一个特别糟糕的主意,因为无法将其反转。 – aschepler