Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I am making a text-based RPG with C++ and I'm having the same error pop up time and again, and I'm sure I'm doing something fundamentally wrong, but I don't know what. Searches turned up the solution to the specific compiler error, but not anything I can use to fix the code I'm writing.

Question I want answered: How do I use pointers to enable communication of variables between separate functions? In other words, how can I use pointers to point to a variable's value so that I can use and manipulate that value in a function in which it was not declared?

TL;DR version: I'm trying to make my "exp" int variable communicate with outside functions using pointers. I get the error "ISO C++ forbids comparison between pointer and integer [-fpermissive]"

Long version: Here's a bit of the code where I'm having problems:

In file charlvl.cpp:

...
int lvl = 1;
int *exp = 0;//value I want communicated to main()
int str = 0;
int vit = 0;
...

in file 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. 

It was not declared here, but in charlvl.cpp. How do I establish communication between the declared variable in charlvl.cpp and main() without having to resort to using global variables?

like image 432
Dylan LaCoursiere Avatar asked Dec 17 '25 01:12

Dylan LaCoursiere


1 Answers

If you defined exp as a global pointer, you don't need to think about the communication thing, you can just simply use it in different functions, but the way you use it is wrong.

&exp += expValue;

should be change to

*exp += expValue;

because * means get that pointer's content to me.

btw, try not defining exp as a pointer may also work.

int exp = 0; exp += expValue;

This is all based on exp is a global var or global pointer.

if you have defined it in a function like this:

void func()
{
   int *expPtr = 0;
   int exp = 0
}

And you want to use it in another function

void use()
{
   // trying to use expPtr or exp.

}

The ways I know is:

1, use a local var and return it in func(), but be aware that the returned var is only a copy.

int func()
{
   int exp = 0;
   exp++;
   return exp;
}

2, use a local pointer and allocate memory for it, then return the pointer or assign the new memory to a global pointer. But be careful about the memory leak, you need to delete it as soon as you don't use it.

int * func()
{
   int *expPtr = 0;
   expPtr = new int(2);
   return expPtr;
}
like image 174
shengy Avatar answered Dec 19 '25 18:12

shengy



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!