C++无法在单独函数中的变量之间建立通信

C++ can't establish communication between variables in separate functions

本文关键字:变量 之间 建立 通信 函数 单独 C++      更新时间:2023-10-16

我正在用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;

您可能需要考虑使用引用。