我试图在多个.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 ++中的多个文件中共享变量?
答案 0 :(得分:0)
要以多个单位共享相同的变量,您可以在除主要单位之外的单位中使用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
希望能帮到你。