アプリ版:「スタンプのみでお礼する」機能のリリースについて

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;
}

A 回答 (1件)

... やりたいのはこんな↓ことですか?



// --- ArrayData.cpp ---
#include "stdafx.h"

using namespace System;

public ref class MyData {
private:
String^ name_;
double data1_;
double data2_;
public:
MyData(String^ name, double data1, double data2) : name_(name), data1_(data1), data2_(data2) {}
String^ name() { return name_; }
double data1() { return data1_; }
double data2() { return data2_; }
};

public ref class ArrayData {
public:
array<MyData^>^ data;
ArrayData() {
data = gcnew array<MyData^>(5);
data[0]= gcnew MyData(L"山田",30,45.2);
data[1]= gcnew MyData(L"高橋",66,43.2);
data[2]= gcnew MyData(L"田中",86,62.7);
}
};

int main() {
ArrayData^ ad = gcnew ArrayData();
for each ( MyData^ data in ad->data ) {
if ( data != nullptr ) {
Console::WriteLine(L"{0} : {1}/{2}", data->name(), data->data1(), data->data2());
}
}
}
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ただ、オーソドックスな書き方であるソースとは思えないので、別の書き方を再度考えてみようと思います。

お礼日時:2012/12/30 13:22

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!