フィールドのインスタンス生成でつまずく

このQ&Aのポイント
  • フィールドのインスタンス生成でSystem::Stringを演算子として使用できない問題について解決方法を教えてください。
  • フィールドのインスタンス生成でCreateInstanceメソッドが使えないエラーが出る場合の対処法を教えてください。
  • フィールドのインスタンス生成でデータ型が正しく指定されていないためエラーが発生してしまいます。どのように修正すれば良いでしょうか。
回答を見る
  • ベストアンサー

フィールドのインスタンス生成でつまずく

private: array<System::String ^> ^ Data; public: HData(void) { InitializeComponent(); // //TODO: ここにコンストラクタコードを追加します // this->Data->CreateInstance(System::String^.100); this->Data->SetValue("help",0); } CreateInstanceでSystem::Stringを演算子として 使用できないといわれてしまいます。 どうしたらよいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.2

#1です。 ああ、間違いを犯してました。 >まあ、StringオブジェクトをallocなりnewなりしてからCreateInstance()の引数に設定しては? じゃなく、参考URLの様に、 >コントロール・オブジェクトを、そのクラス名となる文字列を指定して作成 が目的なら、newとかすると台無しなのでこの部分は、無視してください。

その他の回答 (1)

  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.1

いきなり、変数名の無いオブジェクトは生成出来ないんじゃ無いでしょうか? System::Stringは、クラス名::string型ですよね? まあ、StringオブジェクトをallocなりnewなりしてからCreateInstance()の引数に設定しては?

参考URL:
http://www.atmarkit.co.jp/fdotnet/dotnettips/175createctrl/createctrl.html

関連するQ&A

  • コンストラクタ

    public ref class Himoku_Data : public System::ComponentModel::Component { //フィールド private: array<System::String ^>^ Data; public: Himoku_Data(void) { // //TODO: ここにコンストラクタコードを追加します // this->Data = {"a","b","c","d",}; InitializeComponent(); } error C2059: 構文エラー : '{' h(26) : error C2143: 構文エラー : ';' が '{' の前にありません。 h(26) : error C2059: 構文エラー : '}' コンストラクタ作成でthis-Dataの行にエラーが出てしまいます。 原因がよくわからないのでおしえてください。

  • C#

    form2で入力した文字を form1で表示させたいのですが、上手くいきません。プログラムの(文字制限の為)一部だけ のせます。アドバイス よろしくお願いします。 まず、form1 public class Form1 : System.Windows.Forms.Form { private System.Windows.Forms.MainMenu mainMenu1; private System.Windows.Forms.MenuItem menuItem1; private System.Windows.Forms.MenuItem menuItem2; private System.Windows.Forms.Label label1; private Form2 form2; /// <summary> /// 必要なデザイナ変数です。 /// </summary> private System.ComponentModel.Container components = null; public Form1() { // // Windows フォーム デザイナ サポートに必要です。 // InitializeComponent(); form2= new Form2(); label1.Text=string.Format("{0}",form2.s); // // TODO: InitializeComponent 呼び出しの後に、コンストラクタ コードを追加してください。 // } static void Main() { Application.Run(new Form1()); } private void menuItem2_Click(object sender, System.EventArgs e) { if (form2.ShowDialog(this) == DialogResult.OK) this.Refresh(); } } 次にform2です private void button1_Click(object sender, System.EventArgs e) { string s; s=(string)textBox1.Text; } public string s { get { return s; } }

  • フォーム間のデータ受け渡し

    現在VIsual Studio 2005のフォームアプリケーションを使ってプログラミングしています。ボタンを押すことで新たな子フォームを作成し、親フォームから子フォームへグローバル関数で宣言しているbmp[],picture[],red[]などのデータを渡したいのですがどうすればいいのかわからず困っております。子フォームから親フォームへテキストボックスなどの値を渡す方法などはわかったのですが、それをどう応用していいのかもわからない状況です。最終的には親フォームのbmp[0]におけるred[0]が1(画像処理されている)なら子フォームでbmp[0]を表示させたいと思っています。わかる方がいましたらどうかご教授ください。よろしくお願いします。以下がプログラムとなっております。 *** 親フォーム *** #pragma once #include "pic2.h" namespace pic { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; using namespace System::IO; // 省略 // public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); // //TODO: ここにコンストラクタ コードを追加します // bmp = nullptr; Array::Resize( bmp, 20 ); Array::Resize( picture, 20 ); Array::Resize( bmpr, 20 ); this->red = gcnew array<int>(20); } // 省略 // private: System::Windows::Forms::PictureBox^ pictureBox1; private:array< Bitmap^>^ bmp; // 原画像格納 // private:array< Bitmap^>^ bmpr; // 処理画像格納 // private:array< PictureBox^>^ picture; private:array< int>^ red; // 処理:1 不処理:0 // // 省略 // #pragma endregion private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { bmp[0] = gcnew Bitmap("ファイル名",true); } private: System::Void button1_Click_1(System::Object^ sender, System::EventArgs^ e) { pic2 ^p2 = gcnew pic2(); p2->ShowDialog();     /* ボタンを押すことで新たなフォーム作成 */ } private: System::Void pictureBox1_Click(System::Object^ sender, System::EventArgs^ e) { int x,y; int w = bmpr[0]->Width; int h = bmpr[0]->Height; if(red[0] == 1){ bmp[0] = gcnew Bitmap("ファイル名",true); pictureBox1->Image = bmp[0]; red[0] = 0; return; } if(red[0] == 0){ // 画像処理 // pictureBox1->Image = bmpr[0]; red[0] = 1; } } }; *** 子フォーム *** #pragma once //#include "Form1.h" #include "pic3.h" using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; namespace pic { /// <summary> /// pic2 の概要 /// public ref class pic2 : public System::Windows::Forms::Form { public: pic2(void) { InitializeComponent(); // //TODO: ここにコンストラクタ コードを追加します // } // 省略 // } #pragma endregion private: System::Void pic2_Load(System::Object^ sender, System::EventArgs^ e) { if(親フォームのred[0]==1ならば){ pictureBox1->Image = bmp[0] } } private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {   // 新たな子フォームpic3作成 // } private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { this->Close(); } }; }

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

  • 続き webアプリをつくってます。変数がなぜか渡りません。

    続き webアプリをつくってます。変数がなぜか渡りません。 見回ったのですが原因がわかりませんでした。 間違った箇所はどこですか。 package info.searchman; import java.io.*; import java.sql.*; //import java.util.*; public class ShinzinInfoTorokuBeans implements Serializable { /** * */ private static final long serialVersionUID = 1L; private String Id; private String name; private String old; private String taiju; private String shintyo; private String other; //Constructor public ShinzinInfoTorokuBeans() { System.out.println("sitb constructor"); } // Setter Methods public void setId(String Id) { this.Id = Id; } public void setName(String name) { this.name = name; } public void setOld(String old) { this.old = old; } public void setTaiju(String taiju) { this.taiju = taiju; } public void setShintyo(String shintyo) { this.shintyo = shintyo; } public void setOther(String other) { this.other = other; } // Getting Methods public String getId() { return this.Id; } public String getName() { return this.name; } public String getOld() { return this.old; } public String getTaiju() { return this.taiju; } public String getShintyo() { return this.shintyo; } public String getOther() { return this.other; } //execute insert public void insert() { try { System.out.println("++++" +Id); System.out.println("tib7 insert"); //JDBC Driver Class.forName("org.postgresql.Driver"); Connection con = DriverManager.getConnection("jdbc:postgresql:postgres","postgres","gokui"); Statement stmt = con.createStatement(); String table = "testweb"; String values = "(\'"+Id+"\', \'"+name+"\', \'" +old+"\', \'"+taiju+"\', \'"+shintyo+"\', \'"+other+"\')"; //System.out.println("Id"+"name"+"old"+"taiju"+"shintyo+other"); String insertsql = "insert into "+table+" values " + values; //sql stmt.executeUpdate(insertsql); //db close stmt.close(); con.close(); } catch (Exception ex) { System.out.println("Exception insertでエラー: " + ex.getMessage()); } } } ここまで

    • ベストアンサー
    • Java
  • クラスとインスタンスについて

    はじめまして。Javaをはじめて3か月の超初心者です。 早速ではございますが、質問をさせていただきます。 以下のサンプルで、 class Foo { private int i = 0; Foo(int i) { this.i = i; } void func1() { System.out.println(this.i); } void func2(Foo foo) { System.out.println(foo.i); } } class Main { public static void main(String[] args) { Foo obj1 = new Foo(100); Foo obj2 = new Foo(500); obj1.func1(); obj1.func2(obj2); } } privateフィールドのスコープは同一クラス内からしか アクセスできないと参考書には記述されているの ですが、そのクラス内に上のサンプルのように this.iやfoo.iというように、クラスは同じでも インスタンスが異なるものがiにアクセスするとき、 上のサンプルは、どちらもアクセス制限のエラーが表 示されません。なぜなのでしょうか? this.iというアクセスは、現在実行中のインスタン ス内でのアクセスなので、privateスコープ内での アクセスであるというような感じがするのですが、 foo.iというアクセスの方は、現在実行中のインスタンスとは異なるインスタンス内でのアクセスなので、 privateスコープからはずれているような感じがして なりません。

    • ベストアンサー
    • Java
  • 別スレッドからメインスレッドのテキストボックスに文字を表示させたい

    Visual C++ 2005 Express Editionを使用している初心者です。 タイトルの方法がどうしてもわからないので教えてください。 うまく説明できないので聞きたいところのコードを載せます。 //SAMPLE.cpp #include "stdafx.h" #include "Form1.h" using namespace SAMPLE; int main(array<System::String ^> ^args) { Application::EnableVisualStyles(); Application::SetCompatibleTextRenderingDefault(false); Application::Run(gcnew Form1()); } //Form1.h #include <process.h> #include <vcclr.h> namespace SAMPLE { unsigned __stdcall counter(void *arg); int thread_id1; unsigned dummy; using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; public ref class Form1 : public System::Windows::Forms::Form { public:Form1(void) { InitializeComponent(); //別スレッド起動 thread_id1=_beginthreadex(NULL,0,counter,(void *)1,0,&dummy); } private: System::Windows::Forms::TextBox^ textBox1; private: System::ComponentModel::Container ^components; void InitializeComponent(void) { this->textBox1 = (gcnew System::Windows::Forms::TextBox()); //省略(コンポーネント初期化) } private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { } }; unsigned __stdcall counter(void *arg){ //別スレッド //ここで文字列を記述して上のtextBox1に表示したい 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フォームアプリケーションで作成しています。 初心者の質問ですが、宜しくお願い致します。

  • [CLR]webBrowser->Navigateについて

    あるサイトのログインを実装するために次のコードを書きました。 public: void postdata(){ Uri^ siteUri = gcnew Uri( "http://www.hogehoge.net/index.php" ); array <String^,1>^strData = gcnew array <String^,1 > ( 128 ); String^strHeader; strData[0] = "id=hoge&pass=hogehoge"; strHeader = "Content-Type: application/x-www-form-urlencoded"; this->webBrowser1->Navigate(siteUri,"",strData,strHeader); } しかしコンパイルすると error C2664: 'void System::Windows::Forms::WebBrowser::Navigate(System::Uri ^,System::String ^,cli::array<Type,dimension> ^,System::String ^)' : 3 番目の引数を 'cli::array<Type,dimension> ^' から 'cli::array<Type,dimension> ^' に変換できません。 となります。一見通りそうなのですが・・・。 配列あたりが怪しそうなのですがどうも納得出来ません。 ご教授願えるとありがたいです。

  • フォームのテキストコントロールへの出力

    Cは分かりますが、C++初心者です。 よろしくお願いします。 namespace sample1 外にある関数から、フォームのコントロールにアクセスするには、 どうしたらいいのでしょうか? ========================================================== #pragma once void DspData( ReadData *readdata ); //コールバック関数宣言 namespace sample1 { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; public __gc class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); } protected: void Dispose(Boolean disposing) { if (disposing && components) { components->Dispose(); } __super::Dispose(disposing); } private: System::Windows::Forms::Label * label1; private: System::Windows::Forms::Button * start; private: System::Windows::Forms::Button * end; public: System::Windows::Forms::TextBox * textBox1; private: System::ComponentModel::Container * components; void InitializeComponent(void) { } private: System::Void start_Click(System::Object * sender, System::EventArgs * e) { } }; } //------------------------------------------------ // DspData //------------------------------------------------ void DspData( ReadData *readdata ) { //***↓ここでフォームのテキストボックスへの表示を行いたい。***** textBox1->set_text("ここで出力") return; } ==========================================================

専門家に質問してみよう