- PR -

外部変数の記述について(グローバル変数)

投稿者投稿内容
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-03-29 15:28
引用:

Aに属している、変数Xに、
Bからアクセスするには、どうすればよいでしょうか??


本当にやりたいことはそれなんですか?
コード:
public ref class Dlg_A : public System::Windows::Forms::Form 
{
	int test;
}



コード:
public ref class Dlg_A : public System::Windows::Forms::Form 
{
}

int test;


あ、やりたい事は前者なんですね。すみません。後者だと思っていました。
_________________
囚人のジレンマな日々
ken
大ベテラン
会議室デビュー日: 2006/03/29
投稿数: 121
お住まい・勤務地: 東京
投稿日時: 2006-03-29 15:37
囚人さん、
レスありがとう御座います

実現したいことは、前者にあたります。

>本当にやりたいことはそれなんですか?
>コード:
---------------------------------------------------------------------------
>public ref class Dlg_A : public System::Windows::Forms::Form
>{
> int test;
>}
---------------------------------------------------------------------------

整理いたします。。

上記のような場合があって、
ある操作があって、(ボタンクリック等)Dlg_AからDlg_Bを
表示させて、Dlg_Bから、Dlg_Aのメンバの変数『int Test』
のデータを値を取得したいと思っています。。。

---------------------------------------------------------------------------
public ref class Dlg_B_Load(System:bject^ sender, System::EventArgs^ e){
     int Test_B;
     Test_B = Test; ←Testは、Dlg_AのTest変数。
}




[ メッセージ編集済み 編集者: ken 編集日時 2006-03-29 15:38 ]

[ メッセージ編集済み 編集者: ken 編集日時 2006-03-29 15:39 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-03-29 15:41
引用:

kenさんの書き込み (2006-03-29 15:37) より:

実現したいことは、前者にあたります。


あの... すでに "解答" しているつもりなんですけど... (´;ω;`)

  5 レス目

華麗にスルーされていらっしゃるようなので、理由が欲しいところです。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ken
大ベテラン
会議室デビュー日: 2006/03/29
投稿数: 121
お住まい・勤務地: 東京
投稿日時: 2006-03-29 15:56
レスありがとうございます。
スルーしたわけではありません・・
試してみたのですが、エラーになってしました。

Dlg_A
---------------------------------------------------------------
public ref class Dlg_A: public System::Windows::Forms::Form
{
 public:
Form1(void)
{
InitializeComponent();
//
//TODO: ここにコンストラクタ コードを追加します
//
     }

static int test; ← 定義
---------------------------------------------------------------

Dlg_B
private: System::Void def_Load(System:bject^ sender, System::EventArgs^ e) {
     int bb;
     bb = Dlg_A::test;
}

c:\documents and settings\ken\my documents\visual studio 2005\projects\abc\abc\def.h(89) : error C2653: 'Dlg_A' : 識別子がクラス名でも名前空間名でもありません。
c:\documents and settings\ken\my documents\visual studio 2005\projects\abc\abc\def.h(89) : error C2065: 'test' : 定義されていない識別子です。

何か間違っていますでしょうか??
御願いいたします。
Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2006-03-29 16:09
やはり宣言と定義をわけないと使えませんね。
理由は向こうにも書きましたが、

FormAはFormBが何者かわからなければならない。
FormBもFormAが何者かわからなければならない。

という状態になっています。

FormAでFormBを使うところを .cpp に書くことで回避できると思います。
ここで .cpp では #include <FormB.h> をしておかないといけない。
(FormBからは #include <FormA.h>があれば普通に .h に書いても問題ない)

[ メッセージ編集済み 編集者: Blue 編集日時 2006-03-29 16:10 ]
囚人
ぬし
会議室デビュー日: 2005/08/13
投稿数: 1019
投稿日時: 2006-03-29 16:15
#include "abc.h"
をしていないか、
using namespace Dlg_Aの属する名前空間
をしていないか、
もしくはそのどちらもしていないか、だったりして。

#編集
bb = Dlg_A::test が出来ない理由の事です。
_________________
囚人@わんくま同盟
囚人のジレンマな日々

[ メッセージ編集済み 編集者: 囚人 編集日時 2006-03-29 16:19 ]
ken
大ベテラン
会議室デビュー日: 2006/03/29
投稿数: 121
お住まい・勤務地: 東京
投稿日時: 2006-03-29 16:21
レスありがとうございます。
分かるように記述するには、
どのように書けば良いのでしょうか?
現在、下記のような、状態になっています。。
御願いいたします。

>やはり宣言と定義をわけないと使えませんね。
>理由は向こうにも書きましたが、

>FormAはFormBが何者かわからなければならない。
>FormBもFormAが何者かわからなければならない。

>という状態になっています。

>FormAでFormBを使うところを .cpp に書くことで回避できると思います。
>ここで .cpp では #include <FormB.h> をしておかないといけない。
>(FormBからは #include <FormA.h>があれば普通に .h に書いても問題ない)

FormA.h
#include "FormB.h"

static int test ← ここのメンバ変数になっています。

FormA.cpp
#include "FromA.h"

------------------------------------------------
FormB.h
#include "FromA.h"

FormB.cpp
#include "FromB.h"

Blue
大ベテラン
会議室デビュー日: 2005/09/12
投稿数: 230
お住まい・勤務地: 知っている人は知っている
投稿日時: 2006-03-29 16:39
FormA.h
コード:
public ref class FormA : public System::Windows::Forms::Form
{
public:
     static int test;
private:
     // ボタンクリックイベント。ボタンを押すと FormB が立ち上がる。
     // ※ ここでは宣言のみ。定義は cpp に!
     System::Void FormA_Button1Chilck(System:bject^ sender, System::EventArgs^ e);
};



FormA.cpp
コード:
#include "FormB.h"

System::Void FormA::FormA_Button1Chilck(System:bject^ sender, System::EventArgs^ e)
{
    FormB^ b = gcnew FormB;
    b->ShowDialog( this );    
}



FormB.h
コード:
#include "FormA.h"



FormB.cpp は別になくても良い。

スキルアップ/キャリアアップ(JOB@IT)