3

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() で宣言された変数間の通信を確立するにはどうすればよいですか?

4

2 に答える 2

2

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;
}
于 2012-11-26T02:11:24.807 に答える
0

&and*演算子が混乱しています。*は を にint*変換しint、 を&int*変換しint**ます。

これはあなたが望むものです:

(*exp) += expValue;

参照の使用を検討することをお勧めします。

于 2012-11-26T02:01:49.487 に答える