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

时间:2012-11-26 01:58:46

标签: c++ function pointers

我正在用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()中声明变量之间建立通信,而不必求助于使用全局变量?

2 个答案:

答案 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;

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