C :与多个文件共享变量



我正在尝试在多个.cpp文件中共享全局变量。我曾经使用过extern关键字,但它不符合我想要的。

首先,我有四个文件为:

***** common.hpp *****

#ifndef COMMON_HPP
#define COMMON_HPP
#include <iostream>
void printVar();
void printVarfromA();
void setVar(char *str);
#endif

***** base.cpp *****

#include "common.hpp"
extern char *var;
void printVar(){
    std::cout << var << std::endl;
}
void setVar(char *str){
    var = str;
}

***** a.cpp *****

#include "common.hpp"
char *var = (char*)"This is var from A";
void printVarfromA(){
    printVar();
}

***** main.cpp *****

#include "common.hpp"
int main(){
    printVarfromA();
    setVar((char*)"Var was Changed.");
    printVarfromA();
    return 0;
}

所有事情都很好,结果是:

This is var from A
Var was Changed.

正如我所期望的。

当我添加一个共享var变量的新文件时,出现了问题,例如B.cpp,现在它包含一行:

***** b.cpp *****

char *var;

此时ld returned 1 exit status 错误出现。

我尝试了几种方法并进行了很多搜索,但是我无法得到任何解决方案。

我的问题。如何在C 中的多个文件中共享变量?

要在多个单元中共享相同的变量,您可以在单元中使用extern变量,除了主单位。

// In file a.cpp
#include "A.hpp"
extern int global_x;
void AsetX()
{
    global_x = 12;
}
// In file b.cpp
#include "b.HPP"
extern int global_x;
void BsetX()
{
    global_x = 10;
}

在主单元中,声明那里的实际变量。

#include "A.hpp"
#include "b.HPP"
int global_x;
int _tmain(int argc, _TCHAR* argv[])
{
    std::cout << global_x << std::endl;
    AsetX();
    std::cout << global_x << std::endl;
    BsetX();
    std::cout << global_x << std::endl;
    return 0;
}

输出将为

0
10
12

希望可以帮助您。

相关内容

  • 没有找到相关文章

最新更新