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

ال constructors

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

السلام عليكم

في هذا البرنامج اردت ان استعمل ال constructors لتمهيد الاعضاء البيانية name و position و serial_number في الفئة employee ولكن المصرف يعطيني رسالتي خطأ

//stremp
//models database of employees
//uses switch statement for user choice
#include <iostream.h>
#include <string.h>
const int SMAX = 21;
const int EMAX = 100;
const int PMAX = 21;
class employee
{
private:
	char name[SMAX];
	char position[PMAX];
	int serial_number;
public:
	employee(char n[],char p[],int s) : name(n[]),position(p[]),  //<--- error 1
  serial_number(s)
	{                                               
	}

	void input()
	{
  cout << " Enter name: ";
  cin.get(name,SMAX);
  cin.ignore(10,'\n');
  cout << " Enter the position: ";
  cin.get(position,PMAX);
  cout << " Enter serial number: ";
  cin >> serial_number;
	}

	void output()
	{
  cout << " Name = " << name;
  cout << "\n Position = " << position;
  cout << "\n Serial number = " << serial_number;
	}
};
void main()
{
	employee emps[EMAX]("name","position",0);
	int n=0;
	int j;
	char choice='x';

  while (choice != 'q')
  {
 	 cout << "\n'a' to add an employee"
    "\n'd' to display all employees"
    "\n'q' to quit program"
    "\nEnter letter choice: ";
 	 cin >> choice;
 	 cin.ignore(10,'\n');
 	 switch(choice)
 	 {
 	 case 'a':
    cout << "Enter data for employee " << (n+1) << endl;
    emps[n++].input();
    break;
 	 case 'd':
    for (j=0; j<n; j++)
    {
   	 cout << "\nData for employee " << (j+1) << endl;
   	 emps[j].output();
    }
    break;
 	 case 'q':
    break;
 	 default:
    cout << "Unknown command";
    break;
 	 }
  }
}
                                     //<--- error 2

الخطأ الأول

error C2059: syntax error : ']'

الخطأ الثاني

fatal error C1004: unexpected end of file found

يوجد علامات في الكود عند السطور التي بها هاذين الخطأين

انا استعمل VC++ 6

وشكرا

#2

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

خذ تعديل الكود ,,

//stremp
//models database of employees
//uses switch statement for user choice
#include <iostream.h>
#include <string.h>
const int SMAX = 21;
const int EMAX = 100;
const int PMAX = 21;
class employee
{
private:
char name[SMAX];
char position[PMAX];
int serial_number;
public:
employee(char n[],char p[],int s) : serial_number(s)
{

	strcpy(name , n);
	strcpy(position ,p);
}

void input()
{
 cout << " Enter name: ";
 cin.get(name,SMAX);
 cin.ignore(10,'\n');
 cout << " Enter the position: ";
 cin.get(position,PMAX);
 cout << " Enter serial number: ";
 cin >> serial_number;
}

void output()
{
 cout << " Name = " << name;
 cout << "\n Position = " << position;
 cout << "\n Serial number = " << serial_number;
}
};
void main()
{


	//changed here ..
	employee* emps[EMAX];

	for ( int x=0; x<EMAX;x++)	
  emps[x] = new employee("name","position",0);


int n=0;
int j;
char choice='x';

 while (choice != 'q')
 {
  cout << "\n'a' to add an employee"
   "\n'd' to display all employees"
   "\n'q' to quit program"
   "\nEnter letter choice: ";
  cin >> choice;
  cin.ignore(10,'\n');
  switch(choice)
  {
  case 'a':
   cout << "Enter data for employee " << (n+1) << endl;
   //changed here ..
   emps[n++]->input();
   break;
  case 'd':
   for (j=0; j<n; j++)
   {
    cout << "\nData for employee " << (j+1) << endl;
	//changed here ... 
    emps[j]->output();
   }
   break;
  case 'q':
   break;
  default:
   cout << "Unknown command";
   break;
  }
 }
}

كانت توجد مشكلتين ,, الأولى عند التمهيد في المشيد ,, فالتمهيد لايقبل السلاسل الحرفية ,,فقمت بتعيين القيم اليها بدلا من التمهيد ,,

الثانية كانت في ال main وانشاء الأعضاء employees بحجم EMAX ,, وفي نفس الوقت استدعاء المشيد ,, لكن للأسف المشيد لايقبل الاستدعاء بالنسبة للمصفوفات ,, فيجب تمهيد المتغيرات واحدا تلو الآخر ,,

لذا قمت بتغيير بسيط على الانشاء وأصبح على الشكل ,,

	employee* emps[EMAX];

	for ( int x=0; x<EMAX;x++)	
  emps[x] = new employee("name","position",0);

بدلا من

employee emps[EMAX]("name","position",0);

مع تغيير الاستدعاء من

emps[n++].input()

الى

emps[n++]->input()

بالتوفيق ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

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

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