PDA

View Full Version : سوال: دسترسی نداشتن به عناصر آرایه تشکیل شده از شی های یک کلاس



Tiyana
پنج شنبه 22 آبان 1393, 19:13 عصر
سلام به همه ، من دارم یه صف اولویت مینویسم که با آرایه نامرتب کار میکنه برای این صف یه کلاس دیگه برای عناصرش به اسم element نوشتم که اولویت و دیتا توی اون قرار میگیره و آرایه صف رو آرایه ای از شی های کلاس element در نظر گرفتم و اونو با pointer تعریف کردم اما موقع استفاده وقتی میخوام از (<-) برای دسترسی به مقدار های شی آرایه داشته باشم اصلا شی رو نمیشناسه بنظرتون مشکل از کجا میتونه باشه؟


template <class T> class Queue;

template <class T>
class Element
{
friend class Queue<T>;

private:
T data;
int priority;
};

template <class T>
class Queue
{
public:
Queue(int );
~Queue();
bool IsEmpty();
bool IsFull();
bool Add(const T &,int);
bool Delete(T &);
int getElementCount();

private:
Element<T>* Elements;
bool* ElementStates;
int firstElementEmpty;
int dataCounter;
int Size;
};

template <class T>
Queue<T> :: Queue(int SizeQueue)
{
Size=SizeQueue;
dataCounter=0;
ElementStates=new bool[SizeQueue];
Elements=new Element<T>[SizeQueue];


for(int i=0;i<SizeQueue;i++)
{
ElementStates[i]=false;
}
}

template<class T>
bool Queue<T> ::Add(const T &value,int pr)
{
if(IsFull())
return false;
else
{
int addPosition;
for(int i=0;i<Size;i++)
{
if(ElementStates[i]==false)
{
addPosition=i;
ElementStates[i]=true;
break;
}
}
Elements[addPosition]->data=value;
Elements[addPosition]->priority=pr;
dataCounter++;

return true;
}
}

مسعود اقدسی فام
پنج شنبه 22 آبان 1393, 19:26 عصر
Elements اشاره‌گری هست که ابتدای آرایه رو نگه می‌داره. اما [Elements[i عنصر محل i این آرایه (و نه اشاره‌گر به اون محل) هست. پس باید مثلا Elements[i].data نوشته شه و نه Elements[i]->data. از عبارتی مثل obj->data زمانی استفاده می‌شه که obj یه اشاره‌گر باشه.
اگه مثلا بخواید خط ۶۵ رو با <- بنویسید باید اینطوری باشه:

(Elements + addPosition)->data=value;

عبارت داخل پرانتز یه آدرس هست.