الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

أين الخطأ في هذا الكود

مغلق
بدأه Deep Blue في 8 فبراير 2003 · 9 رد · 899 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

أرجو من الإخوة الأعضاء إيجاد الخطأ في هذا البرنامج.

المشكلة ببساطة في عملية overloading للـ >> الخاصة بالإخراج

هذا هو الـ header file

// This is the header file for class Array

static const size_t MAX_ITEMS = 100;



#ifndef ARRAY_H

#define ARRAY_H



#include <stdlib.h>

#include <iostream>

using namespace std;





class Array

{

   public:



 //    static const size_t MAX_ITEMS = 100;



     Array();	// default constructor



     size_t get_num_items() {return num_items;}



     int get_item(const size_t item_index);



     friend istream& operator >> (istream& ins, Array& new_array);

     // precondition:  new_array is a valid Array object.

     // postcondition: new_array has been filled with data entered

     //         by the user.

  friend ostream& operator << (ostream outs,const Array& new_array);

  

  friend Array operator+ (const Array& A, const Array& B);

  friend Array operator- (const Array& A, const Array& B);

  friend Array operator* (const Array& A, const Array& B);



  





   private:

     size_t num_items;

     int array[MAX_ITEMS];



};	// end Array class



#endif

و هنا جزء من الـ implementation file و هو سبب المشكلة

istream& operator >> (istream& ins, Array& new_array)

 // precondition:  new_array is a valid Array object.

 // postcondition: new_array has been filled with data entered

 //            by the user.

{

  size_t num_elements = 0;



  cout << "How many elements will you be entering for this array?";

  ins >> num_elements;



  for (size_t i=0; i < num_elements; i++)

  {

    cout << "Enter next element: ";

    ins >> new_array.array;

  }



  new_array.num_items = num_elements;



  return ins;



} // end friend istream& operator >>





     

ostream& operator <<(ostream& outs, const Array& new_array)

{





	outs<<endl<<"the Array elements are : "<<endl;

	for (size_t i=0; i<new_array.num_items; i++)



	{

  outs<<endl<<new_array.array;



	}

	return outs;

}

أرفقت الجزء الخاص بالـ<< مع أنها سليمة و يقبلها الـ compiler بلا مشاكل.

المشكلة هي أن هذه الدالة عبارة عن friend function و المفترض أن لها صلاحية الدخول على الـ member data

و لكن هذه رسالة الـ compiler

array.cpp(71) : error C2248: 'num_items' : cannot access private member declared in class 'Array'



array.h(38) : see declaration of 'num_items'



array.cpp(74) : error C2248: 'array' : cannot access private member declared in class 'Array'



array.h(39) : see declaration of 'array'

أسطر الأخطاء هي

for (size_t i=0; i<new_array.num_items; i++)

و

outs<<endl<<new_array.array;

و هما داخل ال friend function الخاصة بالـoverloading

لماذا لا يحق لها الحصول على قيم لـ private member date

ألا يحق للـ friend functions الحصول على قيم member data حتى ولو كانت private

#3

أول حاجة ألف شكر أخي إسماعيل عنجريني على ردك و محاولة مساعدتي

لكن للأسف لو فعلت ما قلت كيف سيتعرف على new_item أصلاً. يجب أن تتعرف عليها الدالة أولاً

#4

الحمدلله صححت الخطأ و استعضت عن الدخول إلى الـ private member data باستخدام الـ member functions

هناك خطأ آخر و هو الذي سبب لي صداع و هو اختلاف الprototype في ال header file عنه في Implementation file

هنا الاختلاف

هذا في الـ header file

friend ostream& operator << (ostream outs,const Array& new_array);

و هذا في الـ implementation file

ostream& operator <<(ostream& outs, const Array& new_array)

السبب أني لم أضع علامة & للـ parameter الأول في الـ header file

الانسان يتعلم من أخطاءه و الذكي يتعلم من أخطاء غيره

#6

لم أرد إلا بعد أن جربته يا صاحبي ظهر لي ما قلته لك .

فلست ممن يستبق الأحداث.

شكراً لك يا صاحبي على تفضلك بمساعدتي

#7
size_t get_num_items() {return num_items;}

لازم تصححه وتخليه

size_t get_num_items() {return num_items};

---------------------------------------------------------

ايضا لاتنسى بانك عرفت

private:
     size_t num_items;
     int array[MAX_ITEMS];

وهذه هيه رساله الخطا لهذا الشي

array.cpp(74) : error C2248: 'array' : cannot access private member declared in class 'Array'

وايضا استخدمت ال private بره الكلاس وهذا ما يصير :)

واسطر الخطأ اللي حطيتهم اهمه اللي مسوين

access to private class

وهذا ما يصير :)

ادري كلامي مو مفهوم :) بس اتمنى انك تكون فهمته

#8

أخي أبو علي

بالنسبة للنقطة الأولى فأختلف معك لما تكون الـ function زي الحالة هذي تضع ال semi colon داخل القوسين { } و لا تضع بعدهما شيء فهي ليست function prototype بل تستطيع أن تقول أنها الـ Definition كامل.

كلامك بعدين لخبطني لكن اللي أقدر أقوله لك إنه فيه فرق بين array و Array

الأولى هي المصفوفة المعروفة.

لكن الثانية هي عبارة عن class أنا أنشأتها و تحوي المصفوفة.

نقطة أخرى، سيدي أنا لم أضع الـ private خارج الكلاس. مكان البرايفت سليم و لا فيه أي خلل.

عموماً حبيت أشكرك و أشكر كل واحد تفضل علي بالمساعدة.

و أقول لكم إن البرنامج اشتغل و ضبط بس بعد فوات الأوان. يعني سلمته بأخطاءه.

#10

و لا آسف و لا حاجة بالعكس أنت حاولت تساعدني و هذا فضل منك

هذا الموضوع مغلق.

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…