• 締切済み

C++ 変数の参照について

お世話になります。 C++を勉強し始めて間もない者ですが、宜しくお願いします。 Form1.hとForm2.hを作成し、Form1からForm2を表示するところまで作成し、Form2からForm1の変数の参照や操作を行いたいのですが、 (Form1.h) #include "Form2.h" public: int i; Form2^ frm2 = gcnew Form2(); frm2->ShowDialog(); (Form2.h) #include "Form1.h" Form1^ frm1; this->Text = frm1.i.ToString(); の様な処理を行うにはどうすれば良いでしょうか。 お手数おかけしますが、ご教授宜しくお願いいたします。

みんなの回答

回答No.2

参考意見ですが、そのソースを見る限りC++/CLIですよね? C++とC++/CLIは名前が似ていますが別物ですのでご注意ください。 Form2.hでForm1.hをincludeし、Form2.hにForm1クラスのインスタンス変数を追加しましょう。

kurokoko
質問者

補足

ご回答ありがとうございます。 詳細環境を記載し忘れておりました。 VC++2008Express CLI環境です。 すみません。 インスタンス変数を調べてみます。有難うございます

回答No.1

Form2のメンバにForm1を持たせればいい。

kurokoko
質問者

補足

ご回答頂きありがとうございます。 調べてみたのですが、少しややこしく理解するに至っておりません  orz もう少し、深いところまで教えて頂けると助かります。 お手数おかけします

関連するQ&A

  • C++/CLIのオブジェクト型配列

    VC++/CLIで、オブジェクト型の配列data、ArrayData(String^ s, int a, int d, double c)でコンストラクタをつくり array<Object^>^ data = gcnew ArrayData(String^ s, int a, double b); でインスタンス化したいのですがうまくいきません。 さらに、他クラスから、d->data[i].aで、data[i]」の配列のうち、整数型変数aを参照したいたいと思っていますがそれも上手くいきません。 例えば data[0]= gcnew ArrayData("山田",30,45.2); data[1]= gcnew ArrayData("高橋",66,43.2); data[2]= gcnew ArrayData("田中",86,62.7); のdata配列を用意します. VC++2005で作成したファイルを載せますので、それに対応したコード(.hファイルと.cppファイル)を教えてくれるとありがたいです。 このままでは、エラーです。内容は、メンバ変数、ドット演算子など。 --File Name:ArrayData.h-- #pragma once using namespace::System; ref class ArrayData { public:array<object^>^ data; public: ArrayData(String^ name,int data1,double data2); }; --File Name:ArrayData.cpp-- #include "StdAfx.h" #include "ArrayData.h" ArrayData::ArrayData() { data= gcnew array<Object^>(5); data[0]= gcnew ArrayData("山田",30,45.2); data[1]= gcnew ArrayData("高橋",66,43.2); data[2]= gcnew ArrayData("田中",86,62.7); } --File Name Form1.h-- #pragma once #include"ArrayData.h" namespace TestDataArray { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; /// <summary> /// Form1 の概要 /// /// 警告: このクラスの名前を変更する場合、このクラスが依存するすべての .resx ファイルに関連付けられた /// マネージ リソース コンパイラ ツールに対して 'Resource File Name' プロパティを /// 変更する必要があります。この変更を行わないと、 /// デザイナと、このフォームに関連付けられたローカライズ済みリソースとが、 /// 正しく相互に利用できなくなります。 /// </summary> public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); // //TODO: ここにコンストラクタ コードを追加します // ArrayData^ abc = gcnew ArrayData(); //ArrayDataクラスのインスタンス化 int bee= abc->data[0].data1; //data[0]配列のdata1の値(=30)を参照 String^ cee=bee.ToString();  //beeを文字列化 MessageBox::Show(cee); //メッセージボックスにceeを表示 } protected: /// <summary> /// 使用中のリソースをすべてクリーンアップします。 /// </summary> ~Form1() { if (components) { delete components; } } private: /// <summary> /// 必要なデザイナ変数です。 /// </summary> System::ComponentModel::Container ^components; #pragma region Windows Form Designer generated code /// <summary> /// デザイナ サポートに必要なメソッドです。このメソッドの内容を /// コード エディタで変更しないでください。 /// </summary> void InitializeComponent(void) { this->components = gcnew System::ComponentModel::Container(); this->Size = System::Drawing::Size(300,300); this->Text = L"Form1"; this->Padding = System::Windows::Forms::Padding(0); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; } #pragma endregion }; } --File Name:TestDataArray.cpp-- // TestDataArray.cpp : メイン プロジェクト ファイルです。 #include "stdafx.h" #include "Form1.h" using namespace TestDataArray; [STAThreadAttribute] int main(array<System::String ^> ^args) { // コントロールが作成される前に、Windows XP ビジュアル効果を有効にします Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault(false); // メイン ウィンドウを作成して、実行します Application::Run(gcnew Form1()); return 0; }

  • デバッグ中の変数参照について

    VS2005のC++/CLIでアプリを作っているものです。 デバッグ中に作成したメソッドの引数に渡されて来る値をウォッチで 見ようとすると「エラー: 識別子 'str' はスコープ外です」となり 中身が見れません。 作成したクラスのメンバ変数は見れます。 以下が発生したソースです。 ---------------------------- TestClass.cpp ---------------------------- #include "StdAfx.h" #include "TestClass.h" using namespace System; TestClass::TestClass(void) { } // 追加メソッド void TestClass::func( String^ str ){ String^ tmp; tmp = str; } ---------------------------- TestClass.h ---------------------------- #pragma once using namespace System; ref class TestClass { public: TestClass(void); // 追加メソッド void func( String^ ); }; ---------------------------- Form1.h ---------------------------- #pragma once #include "TestClass.h" namespace test2 { (省略) public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); // //TODO: ここにコンストラクタ コードを追加します // TestClass^ aaa = gcnew TestClass(); aaa->func( "あいうえお" ); } (省略) ---------------------------- プロジェクトは、CLRのWindowsフォームアプリケーションで作成しています。 初心者の質問ですが、宜しくお願い致します。

  • C++ Builderでのpublic変数の扱いについて

    class TForm1 { ・・・ public: int i;   ・・・ } のように宣言した変数iは他の関数から どのように参照したらいいのでしょうか?

  • C++2012でのフォーム切替

    いつも御世話になっております。 現在C++2012EXPRESSを使用し勉強を始めたばかりのものです。 早速質問なのですが、フォームの切替の仕方がわからず困っています。 #pragma once #include "Frm_Manual.h" ←追加 private: System::Void cmd_Manual_Click(System::Object^ sender, System::EventArgs^ e) { Frm_Manual^ form = gcnew Frm_Manual(); form->Show(); } 上記で追加したフォームを開く 上記の方法で追加したフォームを開くことが出来ました。 同様に追加したフォームからFrm_Mainを開きたいので #pragma once #include "Frm_Main.h" ←追加 private: System::Void cmd_Main_Click(System::Object^ sender, System::EventArgs^ e) { Frm_Main^ form = gcnew Frm_Main(); form->Show(); } とするとエラーが15個も発生してしまいます。 エラーはC2065,C2061,C2227の三種類です。 どこかでFrm_Main.hをインクルードする必要があると思うのですがどこに記入すればよいのかわかりません。 ネット検索もしたのですが、2つのフォームを交互に開くプログラムは検索できたのですが、現在行いたい処理は、フォームを5個作成し、切り替えるプログラムです。 VBでは簡単に出来たので、安易に考えていましたがつまいづいてしまいました。 よろしくお願いいたします。

  • 初期化していない変数に1が入っていた [C言語]

    初期化していない変数には0が代入される、という話を聞いたので確かめてみたのですが、初期化していない変数には0ではなく1が入っていました。 《ソース》 #include <stdio.h> void main(){ int i; printf("10進数:i=%d",i); } 《結果》 10進数:i=1 初期化していない変数には1が入っているのが正しいのでしょうか。 それとも処理系によって違うのでしょうか。回答よろしくお願いします。

  • C言語の参照はずしについて

    ソートのプログラムなんですが #include <stdio.h> #include <stdlib.h> int comp(const void *, const void *); int main() { int i; int test[6] = {10, 8, 2, 6, 4, 0}; qsort(test, (size_t)6, sizeof(int), comp); printf("\n"); for (i = 0; i < 6; i++) printf("%d\n", test[i]); return 0; } int comp(const void *a, const void *b) { static int i = 1; printf("%02d--%d,%d\n", i, *(int *)a, *(int *)b); i++; return (*(int *)a - *(int *)b); } 最後のreturnの()の中身がよくわかりません。「参照はずし」という事をしてるらしいんですが「参照はずし」とは何ですか意味も教えてください。

  • C++の(左辺値)参照を参照渡し

    おそらく基本的なところなのですが 参照を参照で渡すのはNG…? という記述をどっかで見たような見なかったような気がするのですが 再度確認しようと思うも見つからず。 気のせいかもしれません。 または そのときの文章では「参照」という言葉が別の意味で使われていたかもしれませんが 以下のように、左辺値参照を左辺値参照渡しするコードはconst参照、非const参照問わず規格上OKでしたっけ? #include <stdio.h> void func(int& n){ if ( n%7 ){ n+=9; func(n); } else return; } int main(void){ int i = 1; func(i); printf( "%d", i ); return 0; }

  • VC++2008 フォーム間の変数の受け渡しについて

    フォーム1で DateTime d1; int year; d1 = DateTime::Now; year = System::Int32::Parse( d1.ToString("yyyy") ); で読み込んだ現在の年数を、フォーム2で使いたい場合どうすればいいのでしょうか? private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { Form2^ f = gcnew Form2(); f->Show(); } でForm2を読み込んでいるので、ここに「変数yearを使う」旨を書けばいいのかとも思いましたが、うまく行きませんでした。 使用しているのはVisualC++2008 ExpressEdition。 ボタンをクリックすると別フォームを表示して、そこで元のフォームで使った変数を使おうと考えています。

  • VC++2005 Form1とForm2のデータのやりとり

    現在VC++2005でプログラムをしています。 そこでForm1で表示されているテキストボックスの中身をForm2のテキストボックスに表示するのはどのようにすればよいのでしょうか? ちなみに、Form2の表示は下記のプログラムで行っています。 ―Form1.hの内容― #include "Form2.h" Form2^ newMDIChild = gcnew Form2(); newMDIChild->Show(); ―Form2.hの内容― this->Hide(); というので表示を消しています。 初歩的な質問だと思いますがよろしくお願いします。

  • 変数の使い方

    お聞きしたいのですが、下記の main関数、getaverage関数の両方で 変数averageを宣言してますが、 名前は同じだが、まったく別変数と考えて良いのですか? 教えてください。 #include <stdio.h> int getaverage(int data[10]); int main(void) { int average,array[10] = {15,78,98,15,98,85,17,35,42,15}; average = getaverage(array); printf("%d\n",average); return 0; } int getaverage(int data[10]) { int i,average = 0; for (i = 0;i < 10;i++) { average += data[i]; } return average / 10; }