【问题标题】:Shared Global Variable Between Different Files不同文件之间的共享全局变量
【发布时间】:2021-02-13 21:26:55
【问题描述】:

在将其标记为重复之前,我已经尝试过“公共标头+外部变量”的方法。

来自link

在A.cpp(或)B.cpp中写入,

int gVariable = 10;

记得把上面的定义只写在一个源文件中,否则 如果您同时写入,链接器将抱怨多个符号 源文件。

并且在A.cpp的通用头中,B.cpp写入,

extern int gVariable;

在本例中,当我想将 B.cpp 包含到 A.cpp 中(在 A.cpp 中使用 B.cpp 函数)时,它不起作用。一个例子是here

谢谢

【问题讨论】:

  • In A.cpp (or) B.cpp write, int gVariable = 10; Remember to write the above definition in only one source file 你觉得你这一步做得对吗?

标签: c++


【解决方案1】:

您在 test.h 和 shared.h 中使用相同的包含保护

#ifndef SHARED_H //
#define SHARED_H //

extern int testVar;
#endif /*SHARED_H*/

另外,您没有在test.cpp 中包含test.h,也没有实际定义testVar

#include "test.h"

int testVar = 0;

void toOne() {
    testVar = 1;
}

https://onlinegdb.com/vCXz53DtJ

KamilCuk 正确地指出以双下划线开头的符号是保留符号,所以我还更改了您的包含警卫

【讨论】:

  • 不要定义前导两个下划线的符号。它们是保留的。
  • 是的,但我正在使用 OP 代码,除了编译所需的内容之外,我不想更改任何其他内容
【解决方案2】:

三个错误。您对两个文件使用相同的包含保护

#ifndef __TEST_H

确保每个头文件都有自己的包含保护(通常以文件命名)。

第二个错误是你在test.cpp中没有#include "shared.h",所以你得到一个错误。

第三个错误(感谢 Jack)是,尽管您在问题中声称您未能在任何一个 cpp 文件中定义 testVar

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-17
    • 2012-12-14
    • 2015-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多