有.h文件的问题,它似乎没有正确链接

时间:2017-09-07 01:11:23

标签: c++ linker-errors

我正在通过Bjarne Stroustrup"编程原则和实践使用C ++学习C ++"本章练习的第一部分是显示.h文件的使用。这个练习非常简单,我跟着它写了这封信,但我一直都没有明确地提到foo'当我尝试编译。我将把这三个文件写下来,它们是超短的。

顺便说一下,std_lib_facilities.h是一个.h文件,作者包含了一些包含在其中的内容,如iostream以及使用命名空间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值并使用cout打印(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';
}

use.cpp - 包括my.h定义main()以将foo的值设置为7并使用print_foo()打印它并使用print()

打印值99
#include "my.h"

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

我正在使用的操作系统是Linux,如果有帮助的话

1 个答案:

答案 0 :(得分:2)

extern int foo;

extern表示某处int名为foo。但这里没有定义。这只是foo存在的声明,是对编译器的承诺,foo将在需要时存在。编译器将继续使用foo,即使它不知道foo到底在哪里。

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

int foo;

定义foo并保留此承诺。

Documentation on on extern