[c++]变量跨.cpp文件
[C++]Variables cross .cpp files
这是一个愚蠢的问题,一定很容易回答,但经过几个小时的搜索,我找不到答案。我需要做的是有一对.cpp文件,例如main.cpp和help.cpp,它们共享一个变量vars1,并且可以更改值并检测该值何时被更改。对我来说有意义的方式是,我只需在头文件中的类中声明变量,并将该头文件包含在两个。cpp文件中,但这似乎不起作用。
这是我的代码的副本:
#include <iostream>
#include <fstream>
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include "variables1.h"
using namespace std;
int main(){
variables1 vars1;
do {
cout << "Welcomen If you need help, type 'yes' nown";
cin.getline(vars1.input, 1024);
if (strcmp(vars1.input, "yes") == 0 || strcmp(vars1.input, "Yes") == 0){
vars1.helpvar = true;
cin.get();
}
else{
cout << "Okay then, glad that you know your way aroundn";
}
cin.clear();
cout << "What would you like to do?n";
cin.getline(vars1.input, 1024);
if (strcmp(vars1.input, "logon" ) == 0 ) {
}
} while (0 == 0);
}
help.cpp:
#include <iostream>
#include "variables1.h"
using namespace std;
int help(){
variables1 vars1;
do {
if (vars1.helpvar == true)
cout << "detecting";
} while (0 == 0);
}
variables1.h:
class variables1
{
public:
bool helpvar;
char input[1024];
};
实际上,您正在做的是为主文件和help.cpp创建两个不同的对象,并分别为每个对象设置helpvar变量。您需要的是一个对象,它被help.cpp和main用来只修改helpvar变量的一个实例。
将帮助功能更改为
int help(const variables1& myHelpobject ){
if (myHelpobject.helpvar == true) {
cout << "detecting";
}
}
,然后调用main中的函数:
help(vars1)
你之前所做的是创建一个单独的,独立的,帮助对象。
在这里,我们在main中创建对象,然后将其引用传递给函数。
使用的技术取决于变量的用途。
如果它是某种全局参数,并且必须在所有代码中使用,最简单的方法是将其定义为全局变量:
主文件:
variables1 vars1; // outside all functions
int main(){
...
}
在variables1.h或其他cpp文件中使用变量:
extern variables1 vars1; //outside all functions
然而,在类中初始化和维护这些变量的代码也应该在类中定义。例如,构造函数应该在默认情况下定义值,例如帮助是启用还是禁用。如果您的变量用于在代码的不同部分之间通信,特别是如果某些代码的主要目标是处理这些变量的内容,那么应该通过将变量作为参数传递(如果通信是双向的,则通过引用(&)或通过值)来更好地明确这一点。
发布的代码有两个主要问题:
int help()
never run
需要调用这个函数才能运行。没有任何东西这样做,所以不管vars1.helpvar
的值是多少,你永远不会看到"detecting"
的输出。
考虑添加一个带有函数定义的help.hpp,并从main
调用该函数。
vars1.helpvar
不被main和int help()
共享
目前你有两个variables1
的实例,helpvar
是一个成员变量,所以每个实例都有一个单独的副本。
你可以:
- 使
helpvar
成为variables1
的静态成员 - 在
main
和help
之间共享一次variables1
实例
使用静态变量更有可能给以后的设计带来问题,所以我倾向于选择2
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 命名空间中具有.h和.cpp文件的类
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- C++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- 有充分的理由在h文件中使用include保护而不是cpp文件吗
- 如何在cpp文件之间切换窗口?在Qt中
- 在 .h 文件中的类中声明静态变量和在.cpp文件中声明"global"变量有什么区别
- 我有两个类需要在同一 cpp 文件中相互引用,但第一个类无法识别第二个类类型的对象
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 库标题在标题中不可见,但在 cmake build 下.cpp文件中完全可见.为什么?
- C++ 链接到单独的.cpp文件说"multiple definitions"
- 在 cpp 文件中隐藏采用模板参数引用的方法
- 如何使用 samtools C API 构建一个简单的主.cpp文件
- 包含在.cpp文件中包含在 .h 文件时包含
- C++(.cpp文件和.h文件)拆分代码并添加一个函数,提取 - 这很容易吗?
- 在头文件和 cpp 文件中使用一次 #pragma 时出现结构重定义错误
- 如何使用线程类编译 cpp 文件?
- 使用 Powershell 命令将 cpp 文件的文件夹编译为 GNU 的 g++
- 我应该将外部标头放在 .h 文件还是.cpp文件中?
- 从另一个 cpp 文件更改结构内、映射键内的变量