我正在用C ++制作一个基于文本的RPG,我一次又一次地弹出同样的错误,我确信我做的事情根本就错了,但我不知道是什么。搜索将解决方案提交给特定的编译器错误,但没有任何我可以用来修复我正在编写的代码。
问题我想回答:如何使用指针启用不同功能之间的变量通信?换句话说,我如何使用指针指向变量的值,以便我可以在未声明它的函数中使用和操作该值?
TL; DR版本:我正在尝试让我的“exp”int变量使用指针与外部函数进行通信。我得到错误“ISO C ++禁止指针和整数之间的比较[-fpermissive]”
长版本:以下是我遇到问题的代码:
在文件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()中声明变量之间建立通信,而不必求助于使用全局变量?
答案 0 :(得分:2)
如果你将exp定义为全局指针,你不需要考虑通信事物,只需在不同的函数中使用它,但你使用它的方式是错误的。
&exp += expValue;
应该改为
*exp += expValue;
因为*
意味着将指针的内容传递给我。
顺便说一下,尽量不要将exp定义为指针也可以。
int exp = 0;
exp += expValue;
这完全基于exp
是全局变量或全局指针。
如果你在这样的函数中定义它:
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;
}
答案 1 :(得分:0)
您已让&
和*
运营商感到困惑。 *
将int*
变为int
,而&
将int*
变为int**
。
这就是你想要的:
(*exp) += expValue;
您可能需要考虑使用引用。