مشکل در فرستادن یه آرایه از کلاس به یک تابع
سلام
من این کلاس رو دارم
class Student
{
public :
int Avg;
};
Student *Array_Of_Stu = new Student[Max];
Sort(Array_Of_Stu Avg[]
حالا میخوام عنصر Avg از Array_Of_Stu رو به عنوان یه آرایه به یک تابع بفرستم. اما این ارور رو نشون میده
Sort(Array_Of_Stu Avg[][
نقل قول: مشکل در فرستادن یه آرایه از کلاس به یک تابع
نقل قول: مشکل در فرستادن یه آرایه از کلاس به یک تابع
class Student
{
public :
int Avg;
};
/definitions
Sort(Student *stus)
{
...
}
//allocating
Student *stu = new Student[Max];
//pass
Sort(Student);
نقل قول: مشکل در فرستادن یه آرایه از کلاس به یک تابع
نقل قول:
نوشته شده توسط
_hamid
class Student
{
public :
int Avg;
};
/definitions
Sort(Student *stus)
{
...
}
//allocating
Student *stu = new Student[Max];
//pass
Sort(Student);
ممنون که پاسخ دادید
اما من میخوام Avg رو به Sort بفرستم.
نقل قول: مشکل در فرستادن یه آرایه از کلاس به یک تابع
سلام
فکر کنم این به دردتون بخوره
#include <stdio.h>
class Student
{
public :
int Avg;
};
void Sort(Student *stus,int a)
{
printf("%d",stus->Avg);
}
int main(void)
{
//allocating
Student *stu = new Student[10];
//pass
Sort(stu,stu->Avg);
getchar();
return 0;
}
نقل قول: مشکل در فرستادن یه آرایه از کلاس به یک تابع
ممنون که کمک میکنید
این سورس برنامه من میخوام Avg از کلاس Student رو به تابع Sort بفرستم.
# include <iostream.h>
# include <conio.h>
# define Max 4
class Student{
public :
int Avg;
};
Student *Array_Of_Stu = new Student[Max];
void Insert();
void Sort(int a[]);
int main(void)
{
Insert()
Sort(new Array_Of_Stu Avg[])
return 0;
}
void Insert()
{
int count;
clrscr();
for(int i = 0 ; i < Max; i++)
{
cout<<"\n---------- Enter Avg Of Student : ";
cin>> Array_Of_Stu[i].Avg;
}
}
void Sort(int a[])
{
int i, j, x;
for(i = 0; i < Max - 1; i++)
for(j = i + 1; j < Max; j++)
if (a[i]>a[j])
{
x = a[i];
a[i] = a[j];
a[j] = x;
}
cout<<a[Max-1];
}
نقل قول: مشکل در فرستادن یه آرایه از کلاس به یک تابع
این کد اجرا میشه بعد از گرفتن 4 عدد ماکس رو چاپ میکنه
# include <iostream>
# include <conio.h>
using namespace std;
# define Max 4
class Student{
public :
int Avg;
};
Student *Array_Of_Stu = new Student[Max];
void Insert();
void Sort(Student *);
int main(void)
{
Insert();
Sort(Array_Of_Stu);
return 0;
}
void Insert()
{
int count;
//clrscr();
for(int i = 0 ; i < Max; i++)
{
cout<<"\n---------- Enter Avg Of Student : ";
cin>> Array_Of_Stu[i].Avg;
}
}
void Sort(Student* a)
{
int i, j, x;
for(i = 0; i < Max - 1; i++)
for(j = i + 1; j < Max; j++)
if (a[i].Avg>a[j].Avg)
{
x = a[i].Avg;
a[i].Avg = a[j].Avg;
a[j].Avg = x;
}
cout<<a[Max-1].Avg;
}
نقل قول: مشکل در فرستادن یه آرایه از کلاس به یک تابع
نقل قول:
این کد اجرا میشه بعد از گرفتن 4 عدد ماکس رو چاپ میکنه
خیلی ممنونم جواب داد ولی من میخوام این تابع رو به عنوان تابع سورت در برنامه استفاده کنم.
بنابراین باید avg را از ورودی بگیرد.برای این مشکل باید چه کار کنم.
از اول هم مشکل همین بود و گرنه میشد کل کلاس رو به تابع فرستاد و از یک عنصر اون استفاده کرد.
نقل قول: مشکل در فرستادن یه آرایه از کلاس به یک تابع
اینکه شما بخواین آرگومان ورودی تابعتون آرایه int باشه، باید کل اعدادی که قراره sortبشن یکجا داشته باشین کد خودتونم که نمیشه چون شما دارین یک آرایه از نوع کلاستون ایجاد میکنید و این به این معنا نیست که عضوهای کلاس هم در یک آرایه باشه. بنظرم اگه آرایه intگلوبال تعریف کنید و همونجا تو تابع insert که اعداد رو میگیره تو این آرایه هم ذخیره کنه،بعد تو main برنامه این آرایه رو به تابع sort ارسال کنید :متفکر:
نقل قول: مشکل در فرستادن یه آرایه از کلاس به یک تابع
با سلام
من فكر مي كنم در منطلق برنامه يه كم مشكل هست.
1- اولا اگه يه آرايه از كلاسها ايجاد كنيد پس بايد براي مرتب كردن آن هم تابع (sort)شما بايد يه پارامتر ورودي داشته باشه كه آرايه اي از كلاستون رو دريافت كنه نه آرايه اي از عدد. مثل:
#include <iostream>
#include <conio.h>
using namespace std;
#define Max 4
class Student{
public :
int Avg;
};
Student *Array_Of_Stu = new Student[Max];
void Insert();
void Sort(Student *);
int main(void)
{
Insert();
Sort(Array_Of_Stu);
getch();
return 0;
}
void Insert()
{
for(int i = 0 ; i < Max; i++)
{
cout<<"\n---------- Enter Avg Of Student : ";
cin>> Array_Of_Stu[i].Avg;
}
}
void Sort(Student* a)
{
int i, j, x;
for(i = 0; i < Max - 1; i++)
for(j = i + 1; j < Max; j++)
if (a[i].Avg>a[j].Avg)
{
x = a[i].Avg;
a[i].Avg = a[j].Avg;
a[j].Avg = x;
}
cout<<a[Max-1].Avg;
}
2- اگه مي خواين كه تابع sort شما آرايه اي از عددها رو بگيره و مرتب كنه كه بايد تعريف كلاستون رو عوض كنيد.مثل:
#include <iostream>
#include <conio.h>
using namespace std;
#define Max 4
class Student{
public :
int Avg[Max];
};
Student list;
void Insert();
void Sort(int[]);
int main(void)
{
Insert();
Sort(list.Avg);
getch();
return 0;
}
void Insert()
{
for(int i = 0 ; i < Max; i++)
{
cout<<"\n---------- Enter Avg Of Student : ";
cin>> list.Avg[i];
}
}
void Sort(int a[])
{
int i, j, x;
for(i = 0; i < Max - 1; i++)
for(j = i + 1; j < Max; j++)
if (a.Avg[i]>a.Avg[j])
{
x = a[i].Avg;
a.Avg[i] = a.Avg[j];
a.Avg[j] = x;
}
cout<<a.Avg[Max-1];
}
در برنامه هاي بالا اشتباه شما در موارد زير است:
در خطوط 8و 11 و14و 19و 29 و 33 و 38و 40و 41و 42و 44
هرگاه نمونه ي جديدي از كلاس را ايجاد و به تابع ارسال كنيد تمام اطلاعاتي كه در نمونه ي قبلي ذخيره شده است پاك مي شود.