- ベストアンサー
VisualC++で、変数を他のメソッドで利用するにはどうしたらいいですか?
今、VisualC++(CLR)で、アプリケーションを使っているのですが、 あるメソッドで作ったString型の変数を ほかのメソッドで利用するにはどうしたらいいですか? intならグローバル変数でいけるのですが、 String^ 型なのでできないようです。 グローバル以外に利用する方法があれば教えてください お願いします
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。使える筈です。 System::String^のメンバ変数を用意しておき、其れを他のメソッドから使用すれば良いのではないでしょうか。 ただし、アクセスする以前で、変数に有効なハンドルが入っているかどうかnullptrの確認しないといけません。 しかし、変数をプロパティに通して操作すれば、nullptrの確認が必要なくなります。以下参考程度に。 //メンバ変数 private: System::String^ stringName; private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { //行き成り触っても大丈夫 this->sName->Length; this->sName = gcnew System::String("hello"); } private: System::Void OtherMethod() { this->sName->Length; } private: property System::String^ sName { private: System::Void set(System::String^ sNewName) { this->stringName = sNewName; } private: System::String^ get() { //何も無ければ何かしら作成して返す if(this->stringName == nullptr) this->stringName = gcnew System::String("Empty"); return this->stringName; } }; }; 強引ですが、Tagメンバを利用する手もあります。 private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { //行き成り触っても大丈夫 this->sName->Length; this->sName = gcnew System::String("hello"); } private: System::Void OtherMethod() { this->sName->Length; } private: property System::String^ sName { private: System::Void set(System::String^ sNewName) { this->Tag = sNewName; } private: System::String^ get() { //何も無ければ何かしら作成して返す if(this->Tag == nullptr) this->Tag = gcnew System::String("Empty"); return dynamic_cast<System::String^>(this->Tag); } };
その他の回答 (3)
- D-Matsu
- ベストアンサー率45% (1080/2394)
メソッドというか、「メンバ関数」内で宣言したローカル変数のスコープはそのメンバ関数内だけです。 ですからメンバ変数にするしかないと思いますが。 ※メンバ変数とグローバル変数は別物です 「別クラス」という話ならAccessor・Modifierに走るところですが、本件そういう話ではないですよね?
- Tasuke22
- ベストアンサー率33% (1799/5383)
メソッド、メンバ関数、つまりクラス内の関数では ないのですか? インクルードファイルをどう利用するかは様々だけど・・・
- Tasuke22
- ベストアンサー率33% (1799/5383)
同じクラスならメンバ変数でいいのではないですか? グローバル変数を無くすのもクラスの効果の一つです。
補足
クラスではなく Form1.hなどのメソッドに記述した変数を Form1.h内のほかのメソッドでは使えることは出来ますか? という意味です。すみません、説明不足でした
お礼
メンバ関数を用意すればよかったのですね! わかりましたありがとうございます!