C++无法在单独函数中的变量之间建立通信
C++ can't establish communication between variables in separate functions
我正在用C++制作一个基于文本的RPG,我一次又一次地出现同样的错误,我确信我做错了什么,但我不知道是什么。搜索找到了特定编译器错误的解决方案,但没有找到任何可以用来修复我正在编写的代码的方法。
我想回答的问题:如何使用指针来实现独立函数之间的变量通信?换句话说,如何使用指针指向变量的值,以便在未声明该值的函数中使用和操作该值?
TL;DR版本:我试图让我的"exp"int变量使用指针与外部函数通信。我得到错误"ISO C++禁止指针和整数之间的比较[-fpermission]">
长版本:以下是我遇到问题的一些代码:
在文件charlvl.cpp:中
...
int lvl = 1;
int *exp = 0;//value I want communicated to main()
int str = 0;
int vit = 0;
...
在文件fight.cpp(main.cpp)中:
...
//you've just killed a monster
cout << "nThe monster drops to the ground." << endl;
cout << "You gained " << expValue << " experience!" << endl;
&exp += expValue;//&exp is the character's experience.
//expValue is the exp gained upon monster death
//*exp (from charlvl.cpp) is the value I want to communicate to here.
这里没有声明,而是在charlvl.cpp中声明的。如何在charlvl.cpp中的声明变量和main()之间建立通信,而不必使用全局变量?
如果你将exp定义为全局指针,你不需要考虑通信的问题,你可以简单地在不同的函数中使用它,但你使用它的方式是错误的。
&exp += expValue;
应该改为
*exp += expValue;
因为*
意味着把指针的内容发给我。
顺便说一句,尽量不将exp定义为指针也可以。
int exp = 0;
exp += expValue;
这一切都是基于exp
是一个全局var或全局指针。
如果你在这样的函数中定义了它:
void func()
{
int *expPtr = 0;
int exp = 0
}
你想在的另一个功能中使用它
void use()
{
// trying to use expPtr or exp.
}
我知道的方式是:
1,使用本地var并在func()
中返回它,但要注意,返回的var只是一个副本。
int func()
{
int exp = 0;
exp++;
return exp;
}
2,使用本地指针并为其分配内存,然后返回指针或将新内存分配给全局指针。但是要小心内存泄漏,你需要在不使用它的时候尽快删除它
int * func()
{
int *expPtr = 0;
expPtr = new int(2);
return expPtr;
}
您混淆了&
和*
运算符。*
将int*
变成int
,而&
将int*
变成int**
。
这就是你想要的:
(*exp) += expValue;
您可能需要考虑使用引用。
- 我的 c++ 程序似乎没有发现字符串和我拥有但输入使用 getline 的变量之间的比较
- C++ 编译时在两个变量之间交替
- 创建变量之间的运算符排列
- 计算两个uint8_t变量之间差值的最快方法是什么?
- lambda 表达式中引用捕获的 constexpr 变量和非显式捕获的 constexpr 变量之间的区别
- 计算机如何分配两个变量,我们如何计算两个变量之间的距离?
- 类和变量之间的"ampersand operator"是什么意思?
- 函数参数和临时变量之间复制构造函数的奇怪行为
- 文字符号和字符串变量之间的串联然后返回常量字符*
- 变量之间的关系
- 单例变量和全局变量之间的差异
- 为什么堆栈中的函数局部变量之间存在内存空间
- 在C 中的三个布尔变量之间切换
- 物理寄存器和英特尔SIMD变量之间的关系
- C++无法在单独函数中的变量之间建立通信
- c和c++上下文中静态、自动、全局和局部变量之间的差异
- 如何在我存储的两个变量之间生成随机数
- 在变量之间移动队列而不复制元素
- 什么是介于2 int变量之间的mean管道运算符
- C 和 C++ 的静态变量之间的差异