• ベストアンサー

構造体のジェネリックのインスタンス化について

先日、C++を始めたばかりの者です。 Visual C++ 2008を使って、Windowsフォームアプリケーションを作っているのですが、以下のように、 List<Point>^ pts = new List<Point>(); とすると、この行で、コンパイルエラー:C3845 "ref クラス または値型の内部で、スタティック データ メンバのみ初期化することができます"と、なってしまいます。 System::Collections::Genericと、System::Drawingはusing済みです。 回答、よろしくお願いします。

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

  • ベストアンサー
回答No.1

エラーのまま意味だと思いますよ。 pts は何かのクラスのメンバですよね? その何かのクラスがインスタンス化されない限り、 ptsは存在しないので、初期化されても困るのでは? スタティックなら何かのクラスがインスタンス化されなくても 存在しているので初期化できます。

tink_42h
質問者

お礼

早速のご回答、ありがとうございました。 エラーの行を private: static List<Point>^ pts = new List<Point>(); として、コンパイルしたところ通りました。 staticキーワードが必要だったようです。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • イベントパンドラで作成したインスタンスを、別のイベントパンドラで使う

    Visual studio 2005 のC#で勉強をしているのですが、インスタンスをグローバル変数のように宣言する仕方がわからなくてこまっています。 ソースコードで説明すると、 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace tesuto { public partial class Form1 : Form { public class car { public string a; } public Form1() { InitializeComponent(); car bike = new car();//このインスタンスをpicturebox //_Clickのイベントパンドラの中                 //で使いたい bike.a = "asd"; } private void pictureBox_Click(object sender, EventArgse) { string b; b = bike.a;//このようにしたいが、実際はエラーがでる } } } はじめての質問&クラスがなんたるかをしっかり理解していないので わかりにくい質問になったかもしれませんが、よければご回答ください。よろしくお願いします。

  • assigning a value to structure's member accessed via collection

    Class SampleA Private SampleAPoints As New System.Collections.Generic.List(Of System.Drawing.Point) Public ReadOnly Property Points As System.Collections.Generic.List(Of System.Drawing.Point) Get Return SampleAPoints End Get End Property End Class Class himajin100000 Shared Sub Main Dim Samp As New SampleA Samp.Points.Add(New System.Drawing.Point(80,80)) Samp.Points(0).X = 40 Samp.Points(0).Y = 40 End Sub End Class 'とかやってたら 'Expression is a value and cannot be target of an assignment 'といわれてしまいました。 '参考 'http://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=295107 'どうやって切り抜けますか?

  • C#についての質問です

    Microsoft Visual C# 2010 Express をつかって using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Console { class Program { static void Main(string[] args) { Console.WriteLine("皆様、はじめまして"); } } } と入力して.csで保存したのですが、コマンドプロンプトで 'csc' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 とでてコンパイルできません。対応を教えてください。

  • C++ Point構造体について

    Point型の配列を作成したいのですが、うまくいきません。 Point^ myArray[] = {  gcnew Point(20, 100),  gcnew Point(40, 150),  gcnew Point(60, 125),  gcnew Point(40, 100),  gcnew Point(60, 75),  gcnew Point(40, 50) }; error C2728: 'System::Drawing::Point ^' : ネイティブ配列はこのマネージ型を含むことはできません となり、コンパイルが通らず、困っています。 アドバイスよろしくお願い致します。

  • Form1で宣言したインスタンスをForm2で使う

    開発環境はMicrofoft visual stdio 2005 で開発言語はC#を使い、Windousアプリケーションでプログラミングしているのですが、あるフォームで宣言したインスタンスを別のフォームで使う方法がわかりません。具体的にソースコードで説明すると using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace tesuto {   public partial class Form1 : Form   {     class Car     {       public int a;     }     public void Form1_Load(object sender, EventArgs e)     {       Car bike = new Car();//ここで宣言したインスタンスを       bike.a = 10;       Form2 fm2 = new Form2(this);       fm2.Show();     }   }   public partial class Form2 : Form   {     public void Form2_Load(object sender, EventArgs e)     {       int b;       b = bike.a;//ここでこのように使いたい     }   } } ということです。 前も似たような質問をさせていただき、たくさんの回答をいただいたにも関わらず自分のプログラム能力が低く、理解できませんでした><。なのでよければ、回答は言葉だけではなくこの上のソースコードを基にして(コピペ貼り付けなどで)、すこしでいいですのでソースコードを書いていただけませんでしょうか。 また、プログラミングを初めてまだ間もないので、すこし初心者向けでお願いします。 質問する側なのに色々要求をして申し訳ないのですが、もし御面倒でなければ御回答をお待ちしております。 よろしくおねがいします。 

  • 使用しているusing名前空間を取得する方法

    visual studio C# 2005 express .net framework 2.0を試用しています。 例えば次のような ------------------------------------ using System; using System.Collections.Generic; using MySystem.MyCollections; namespace Test { public class Tester { public Tester() { } } } ------------------------------------ 「System」 「System.Collections.Generic」 「MySystem.MyCollections」 という3つの名前空間を使っていますが、 この一覧をプログラム側で動的に取得する方法はあるのでしょうか? または使用しているdll一覧でもよいのですが、 型の探索を行いたいと思いました。

  • コンストラクタの中でメンバクラスをnewしてはだめなのですか?

    C#2008EXPRESS EDITIONです。 以下のようなソースで、★1ではT.aがちゃんと生成されてるのに、★2のようにすると、Tの各メンバがNULLになってしまいます。 こういうやり方は、だめなのでしょうか?デバッガでは、引数無しのコンストラクタの内容を実行しているようなのですが・・・ なお、当方はCは理解していますが、C++を随分前に落伍した程度の者で、今回C#に挑戦してみようとしています。 using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication2 { class Program { public class point { public double x; public double y; public point(double a, double b) { x = a; y = b; } } public class Triangle { public point a; public point b; public point c; public Triangle() { point a = new point(0,0); point b = new point(0,0); point c = new point(0,0); } public Triangle(point a,point b,point c){ this.a = a; this.b = b; this.c = c; } } static void Main(string[] args) { ★1 Triangle T = new Triangle(new point(1,2),new point(3,4),new point(5,6)); ★2 Triangle T = new Triangle(); Console.WriteLine("T.a.x={0} T.a.y={1}",T.a.x,T.a.y); } } } すみません、インデントを付ける方法がわからなくて、見にくいソースになってしまって。

  • C#で構造体配列

    C#で構造体配列の操作練習?をしているのですが using System; using System.Collections.Generic; using System.Text; namespace test1 { public struct Data { public string name; // 名前 public uint value; // 値 } class read { Data[] human = new Data[300]; public static string idSearch() { for (int i = 0; i < 300; i++) { if (test1.read.human[i].value == 25) return test1.read.human[i].name; } } } } だと エラー CS0120: 静的でないフィールド、メソッド、またはプロパティ 'test1.read.human' で、オブジェクト参照が必要です。 と言うエラーが出るのですが、どうしてでしょうか?

  • C#でオブジェクトの配列を使う

    開発環境はMicrofoft visual stdio 2005 で開発言語はC#を使い、Windousアプリケーションでプログラミングしているのですが オブジェクトを配列でせんげんし、オブジェクトのメンバを使うとエラーが出てしまいます。ソースコードで説明すると using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; namespace WindowsApplication1 {   public partial class Form1 : Form   {     public class car     {       int a;       public void set(int i)       {         a = i;       }     }     public Form1()     {       InitializeComponent();     }     private void label1_Click(object sender, EventArgs e)     {       car[] bike = new car[1];       bike[0].set(1);//ここでひっかかる     }   } } これをじっこうするとデバックは通るのですが、label1_Clickイベントが発生すると、「NULLの場所を参照しています」という意味のエラーが出てしまいます。 C#はほとんど初心者なので、初歩的なミスだとおもうんですが、 よろしければ御回答をお願いします。

  • フォームを閉じる方法

    VC#2008ExpressEditionを使用して仕事で使う在庫管理ソフトを作成しています。 まず、ウェルカムページが開いて、その後認証ページが開くように作っていますが、認証ページが開いたのと同時にウェルカムページを閉じたいのですが、閉じることが出来ません。どなたか教えて下さい。 ウェルカムページのコーディング using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace zaiko { public partial class welcomeForm : Form { public welcomeForm() { InitializeComponent(); } private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e) { Form mainForm = new mainForm(); mainForm.Show(); } } } 認証ページのコーディング using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace zaiko { public partial class mainForm : Form { public mainForm() { InitializeComponent(); } private void mainForm_Load(object sender, EventArgs e) { Form welcomeForm = new Form(); welcomeForm.Close(); } } }

このQ&Aのポイント
  • EW-M5071FTのエラーコードOxECについて
  • 電源を切り、再度電源を付けたものの、同じメッセージが表示される
  • EPSON社製品に関する質問
回答を見る

専門家に質問してみよう