アドレスを渡して解決
同じインスタンス名で宣言し直しても使えないので、アドレスを渡して解決します。
参考
こちらのページを参考にしました。
サービス終了のお知らせ
クラス宣言
#include <iostream> using namespace std; class Particle{ public: float x; float y; void setup(); void calc(); }; void Particle::setup(){ x = 1; y = 2; } void Particle::calc(){ cout << x + y << endl; }
インスタンスをそのまま使う
int main(){ void test(); Particle pa; pa.setup(); test(); return 0; } void test(){ pa.calc(); }
error: use of undeclared identifier 'pa'
paを宣言していないと怒られます。
同じインスタンスを宣言する
void test(){ Particle pa; pa.calc(); }
これでいけるだろうと思ったら・・・
1.39537e+16
こんなわけのわからない数字が・・・・。おそらく宣言されたx,yに入っていたアドレスの番地が足されたのかもしれません。
アドレスを渡す
int main(){ void test(Particle*); Particle pa; pa.setup(); Particle* address = &pa; test(address); return 0; } void test(Particle* address){ (*address).calc(); }
ポインタ変数(インスタンス?)としてaddressを宣言し、そこにインスタンスであるpaのアドレスを&をつけて渡します。floatやintではなくParticleをつけて宣言するのは、Particleという型?の分だけメモリを確保する必要があるからだと思います。
*をつけるとポインタ変数に入った番地に入ってる値を示します。ここではpaと同じものを指します。
3
実行すると正しい結果になりました。
違う書き方
void test(Particle* address){ address->calc(); }
ちなみ記号を使って上のように書くこともできます。