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

مبتدأ يبغي المساعدة

مغلق
بدأه AhmedSameh في 20 أبريل 2004 · 9 رد · 758 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

ابغي المساعدة منكم يا جماعة

#include <iostream.h>
#include <string.h>

const int MAX=10;
const int NON=12;

class ordinal
{
private:
	char arr_num[NON][MAX]={"first","second","third","fourth","fifth","sixth","seventh","eighth","ninth","tenth","eleventh","twelfth"};
	char arrNum[MAX]; 
	int ordNum;
	int outOrdNum;
public:
	void arrToOrd()
	{
  int gotit=0;
  int j;
  while ( !gotit )
  {
 	 cout << "\nEnter the arrangement number :";
 	 cin >> arrNum;
 	 for (j=0; j<NON; j++)
 	 {
    if (stricmp(arrNum,arr_num[j])==0)
    {
   	 gotit=1;
   	 break;
    }
 	 }
  }
  outOrdNum=j+1;
	}
	void out_ord_num()
	{
  cout << outOrdNum;
	}
	void ordToArr()
	{
  int x;
  int Gotit=0;
  while ( !Gotit)
  {
 	 cout << "\nEnter the ordinary number :";
 	 cin >> ordNum;
 	 for (x=0; x<NON; x++)
 	 {
    if (ordNum==(x+1))
    {
   	 Gotit=1;
   	 cout << arr_num[x];
   	 break;
    }
 	 }
  }
	}
};
void main()
{
	ordinal ordinal1;
	char choice;
	while ( choice!= 'q')
	{
  cout << "\nPress o or a or q";
  cin >> choice;
  switch (choice)
  {
  case 'o':
 	 ordinal1.ordToArr();
 	 break;
  case 'a':
 	 ordinal1.arrToOrd();
 	 ordinal1.out_ord_num();
 	 break;
  case 'q':
 	 break;
  }
	}
}

هذا البرتامج المفروض انه يخير المستخدم ما بين التحويل من ارقام 1,2,3الي first ,second وهكذا اذا ضغط o او العكس اذا ضغط a واذا ضغط q يخرج .

ولكن الكومبايلر بيظهر الخطئين التاليين عند السطر الخاص بتعريف مصفوفة ايام الاسبوع

error C2059: syntax error : '{'

error C2334: unexpected token(s) preceding '{'; skipping apparent function body

فما المشكلة علما بأني استعمل VC++ 6

واشكركم

وفي انتظار ردكم

والسلام عليكم

#2

السلام عليكم

هناك خطئين اكتشفتهم بالمرور السريع على الكود

void out_ord_num()
{
 cout << outOrdNum;
}
void ordToArr()
{
 int x;
 int Gotit=0;
 while ( !Gotit)
 {
  cout << "\nEnter the ordinary number :";
  cin >> ordNum;
  for (x=0; x<NON; x++)
  {
   if (ordNum==(x+1))
   {
    Gotit=1;
    cout << arr_num[x];
    break;
   }
  }
 }
}
};   //<--------

فتحت 4 اقواس و اغلقت 5, و علامة ال ; ليس موضعها هنا. الحل : الغى السطر المعلم عليه

هذا والسلام

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#3

السلام عليكم

الف شكر علي اهتمامك بالرد اخي احمد غريب

ولكن هذا ليس خطأ ولكن هذه ال { خاصة باغلاق ال } الخاصة بال class

وشكرا

#4

السلام عليكم

طيب اخى اضف هذى السطر

#include "stdafx.h"

ولكن هناك اخطاء اخرى

والسلام

لا إله إلا الله محمد رسول الله

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#5

أخي AhmedSameh

الخطأ الذي أرتكبته هو إعطاء قيم أولية (تهيئة) لأحد عناصر الـ class

وهو المصفوفة arr_num وهذا غير مسموح به.

لايمكن وضع قيم للمتغيرات داخل تعريف الـclass.

حاول مرة أخرى.

#6

السلام عليكم ,,

كما أجابك أخي العزيز CompuM4n ,, يجب تعريف المتغيرات الأعضاء خارج الفئة الخاصة بها ,,

في حالتك يكفي ان تضيف المتغير arr_num خارج الفئة ليصبح الكود ,,

#include <iostream.h>
#include <string.h>

const int MAX=10;
const int NON=12;


char arr_num[NON][MAX]={"first","second","third","fourth","fifth","sixth","seventh","eighth","ninth","tenth","eleventh","twelfth"};


class ordinal
{
private:

char arrNum[MAX]; 
int ordNum;
int outOrdNum;
public:
void arrToOrd()
{
 int gotit=0;
 int j;
 while ( !gotit )
 {
  cout << "\nEnter the arrangement number :";
  cin >> arrNum;
  for (j=0; j<NON; j++)
  {
   if (stricmp(arrNum,arr_num[j])==0)
   {
    gotit=1;
    break;
   }
  }
 }
 outOrdNum=j+1;
}
void out_ord_num()
{
 cout << outOrdNum;
}
void ordToArr()
{
 int x;
 int Gotit=0;
 while ( !Gotit)
 {
  cout << "\nEnter the ordinary number :";
  cin >> ordNum;
  for (x=0; x<NON; x++)
  {
   if (ordNum==(x+1))
   {
    Gotit=1;
    cout << arr_num[x];
    break;
   }
  }
 }
}
};
void main()
{
ordinal ordinal1;
char choice;
while ( choice!= 'q')
{
 cout << "\nPress o or a or q";
 cin >> choice;
 switch (choice)
 {
 case 'o':
  ordinal1.ordToArr();
  break;
 case 'a':
  ordinal1.arrToOrd();
  ordinal1.out_ord_num();
  break;
 case 'q':
  break;
 }
}
}

تم تعديل هذه المشاركة بواسطة HGB في 21 أبريل 2004 في 00:30

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#7

السلام عليكم

شكر لكل من حاول الأجابة علي سوألي

وشكر خاص للاخين compuM4n و HGB الذاني اعطياني الاجابة الصحيحة

والسلام عليكم

#8

السلام عليكم ,,

قلت فيي الاجابة السابقة يجب تعريف المتغيرات الاعضاء خارج الفئة ,, لكن أخطأت وانما هي تمهيد المتغيرات الأعضاء خارج الفئة ,,

بالطبع يوجد تمهيد وتعيين ,, والفرق بينهما أن التمهيد يكون وقت انشاء (تعريف) المتغير ,,

أما التعيين يمكن أن يكون بعد انشاء(تعريف) المتغيير ,,

تمهيد
int x =10;

تعيين ,,
int c;
c=5;

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#9

السلام عليكم

هناك سؤال للأخ HGB خاص بالأجابة الأخيرة

كيف يكون المتغير عضو في فئة ويتم تعريفه خارجها؟اعرف ان هذا ضروري لتمهيده ولكن كيف ؟

بالأضافة الي ذلك الا يضر ذلك بأمن المتغير حيث انه معرف خارج الفئة اي ان اي جزء في البرنامج يستطيع ان يناديه و يتعامل معه؟

وشكرا

#10

السلام عليكم ,,

اقتباس
كيف يكون المتغير عضو في فئة ويتم تعريفه خارجها؟اعرف ان هذا ضروري لتمهيده ولكن كيف ؟

لايتم تعريفه خارجها وانما تعين قيمته أو تمهيدها ,, كالتالي :

خذ المثال :

=

class Test
{
public:

	Test();

	int y;
	char c;
};

Test::Test() : y(10)
{

c='g';
}

void main()
{

}

في المثال السابق ,, تم تعيين القيمة ل c وتمهيد قيمة ل y ,,

الفرق بين التعيين والتمهيد فقط عندما نريد تعيين قيمة لمتغير هو في الأصل ثابت في الفئة عندها لايمكن تعيين قيمة له وانما تمهيدها كالتالي :

class Test
{
public:

	Test();

const int y;
char c;
};

Test::Test() : y(10)
{

}

في المثال أعلاه سيعمل المثال ,, لكن في المثال التالي ,,

class Test
{
public:

	Test();

const int y;
char c;
};

Test::Test()
{

	y=10;
}

فلن يعمل !! , لأنه يتمتعيين القيم وليس تمهيدها في هذه الحال ,, وامتغيرات الثابته يجب اعطاءها قيم فقط وقت الانشاء ,, يعني التمهيد فقط ,,

في مثالك أنت قم بعمل التالي لوضع القيم داخل الفئة ,,

المثال ,,

#include <iostream.h>
#include <string.h>

const int MAX=10;
const int NON=12;

class ordinal
{
private:
char arr_num[NON][MAX];
char arrNum[MAX]; 
int ordNum;
int outOrdNum;
public:

ordinal::ordinal();
void arrToOrd()
{
 int gotit=0;
 int j;
 while ( !gotit )
 {
  cout << "\nEnter the arrangement number :";
  cin >> arrNum;
  for (j=0; j<NON; j++)
  {
   if (stricmp(arrNum,arr_num[j])==0)
   {
    gotit=1;
    break;
   }
  }
 }
 outOrdNum=j+1;
}
void out_ord_num()
{
 cout << outOrdNum;
}
void ordToArr()
{
 int x;
 int Gotit=0;
 while ( !Gotit)
 {
  cout << "\nEnter the ordinary number :";
  cin >> ordNum;
  for (x=0; x<NON; x++)
  {
   if (ordNum==(x+1))
   {
    Gotit=1;
    cout << arr_num[x];
    break;
   }
  }
 }
}
};

ordinal::ordinal()
{	strcpy(arr_num[0],"first");
	strcpy(arr_num[1],"second");
	strcpy(arr_num[2],"third");
	strcpy(arr_num[3],"fourth");	وهكذا أكمل باقي الارقام ,, 

}

void main()
{
ordinal ordinal1;
char choice;
while ( choice!= 'q')
{
 cout << "\nPress o or a or q";
 cin >> choice;
 switch (choice)
 {
 case 'o':
  ordinal1.ordToArr();
  break;
 case 'a':
  ordinal1.arrToOrd();
  ordinal1.out_ord_num();
  break;
 case 'q':
  break;
 }
}
}

اذا حدثت مشكلة فسنساعدك باذن الله ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

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

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