PDA

View Full Version : سوال: مشکل در تعریف کلاس



aapalireza
یک شنبه 29 اسفند 1389, 00:36 صبح
سلام
من کلاسی را به صورت زیر تعریف کرده ام و یک آرایه از آن ساخته ام:
کدهای زیر را در فرم اصلی برنامه نوشتم

class Vertex
{

public float X;
public float Y;
}


Vertex[] myNode;


و در رویداد فرم لود نوشتم:

private void Form1_Load(object sender, EventArgs e)
{
myNode=new Vertex[20];

}


حال که می خواهم مقادیر آن را مقدار دهی کنم, در هنگام اجرا خطا میگیرد!!

myNode[0].X = 1;


لطفاً راهنماییم کنید...

sinashahab
یک شنبه 29 اسفند 1389, 01:29 صبح
خوب بايد هر كدوم از اون 20 تا رو به بار مقدار دهي كني.

با حلفه مثلا : (شرمنده الان VS ندارم)
for (int i = 0 ; i < 20 ; i++ )
{
class[i] = new class();
}

saeedgharedaghi
یک شنبه 29 اسفند 1389, 01:33 صبح
سلام دوست عزیز
چون نوع متغیر داخل کلاس از نوع float است باید مقدار float به آن متغیر نسبت داد،
شما با این خط کد در واقع یک مقدار int به متغیر کلاس نسبت میدهید، و چون کامپایلر سی شارپ نمیتواند عمل تبدیل را خود انجام دهد
پس باید شما این کار را انجام دهید.
2 روش وجود دارد:


1. myNode[0].X =(float) 1;
2. myNode[0].X = 1f;



در ضمن باید بگم ربطی نداره کل 20 تا کلاس رو مقدار دهی کنی یا نه.

shadi khanum
یک شنبه 29 اسفند 1389, 10:47 صبح
میتونی به جای 1 بنویسی 1.0

epsi1on
یک شنبه 29 اسفند 1389, 11:07 صبح
سلام دوست عزیز
چون نوع متغیر داخل کلاس از نوع float است باید مقدار float به آن متغیر نسبت داد،
شما با این خط کد در واقع یک مقدار int به متغیر کلاس نسبت میدهید، و چون کامپایلر سی شارپ نمیتواند عمل تبدیل را خود انجام دهد

سلام دوست من.
فکر میکنم اشتباه میفرمایید. بصورت implicit خیلی از انواع درون ساخت دات نت قابل تبدیل به هم هستند و بقولی کامپایلر (یا بطور دقیقتر زمان-اجرا) بطور خودکار عمل تبدیل رو انجام میده (این صفحه (http://msdn.microsoft.com/en-us/library/y5b434w4.aspx)رو لطفا ببینید).
فکر میکنم مشکل اصلی هم همونطور که دوست عزیزمون sinashahab فرمودند این باشه که هنوز تک تک اعضای آرایه مقدار دهی نشدن. و با مثلا راه حل ایشون مشکل حل میشه...

aapalireza
یک شنبه 29 اسفند 1389, 22:01 عصر
ممنون, مشکل حل نشد!
برای متغیر که نبود, چون خودش 1 را float میکنه! اگر نمی کرد اصلاً اجرا نمی شد و ارور میداد!
برنامه ی من اجرا میشود..., به رویدادی که در آن مقدار دهی وجود دادرد میزسد, متوقف می شود!
حلقه هم فایده ای نداشت!
آیا مکان تعریف درست است؟!
کلاس را در داخل

public partial class Form1 : Form
{

تعریف کرده ام....
لطفا راهنماییم کنید

Reza_Yarahmadi
یک شنبه 29 اسفند 1389, 22:40 عصر
دوست عزیز توضیح دوستمون sinashahab (http://barnamenevis.org/member.php?70861-sinashahab) درست بود. شما توی لود فرم فقط یک آرایه ساختید ولی هر یک از عناصر آرایه جداگانه باید ساخته بشه (new بشه!) به کد ساده زیر توجه کنید.
public partial class frmBase : System.Windows.Forms.Form
{
public frmBase()
{
InitializeComponent();
}
class Vertex
{
public float X;
public float Y;
}

Vertex[] myNode;

private void frmBase_Load(object sender, EventArgs e)
{
myNode = new Vertex[20];
for (int i = 0; i < myNode.Length; i++)
myNode[i] = new Vertex();
myNode[0].X = 1;
}
}