外部变量的问题

use*_*146 2 c++ variables extern

我有2个cpp文件和一个头文件,我已经包含在两个cpp文件中.就像这样:

abc.h

extern uint32_t key;
Run Code Online (Sandbox Code Playgroud)

a.cpp

#include "abc.h"
uint32_t key;
int main
{
.............
}
Run Code Online (Sandbox Code Playgroud)

b.cpp

#include "abc.h"

int main
{
printf("Key: %.8x\n", key);
.............
}
Run Code Online (Sandbox Code Playgroud)

现在当我编译a.cpp时,没有错误.但是当我编译b.cpp时,它会给出错误"对'key'的未定义引用".请帮我找到这段代码中的问题.

Jer*_*fin 9

要共享变量,通常会有以下内容:

// A.h
extern int key;
void show();

//a.cpp
#include "a.h"

int main() { 
    key = 1;
    show();
};

// b.cpp
#include "a.h"
#include <iostream>

int key;

void show() { std::cout << "Key = " << key; }
Run Code Online (Sandbox Code Playgroud)

有几点不在这里.首先,将extern声明放在标题中,并将其包含在使用该变量的所有文件中.extern在一个且仅一个文件中定义变量(不带).只有一个文件应包含名为的函数main.

编辑:要构建它,您自己编译每个文件,但您必须将两个文件链接在一起.例如,使用gcc你可以做类似的事情:

gcc -c a.c
gcc -c b.c
gcc a.o b.o
Run Code Online (Sandbox Code Playgroud)

第一个编译(但不链接)ac第二个与bc相同第三个实际上将两个链接在一起并生成一个可以执行的二进制图像(传统上命名a.out,但是,例如,在Windows上通常更改为a.exe).

  • 这是从两个源文件构建一个程序; 看起来OP正试图建立两个程序. (3认同)