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;
}
お礼
回答ありがとうございます。 また実装が近くなった時に別質問で投稿させて頂きますね。