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

إستدعاء البوينترز في تعريف الكلاس

مغلق
بدأه Wase3 Sadr في 19 مارس 2005 · 5 رد · 791 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ..

إخواني لو عرفت كلاس :

class List
{
	class Node
	{
	public:
  Student data;
  Node *next;
  Node () {next = 0;}
  Node ( const Student &s , Node *l = 0): data ( s ) , next (l){}
	};

	Node *head;
	Node *set_position(int );
	int count;

	public:
  List () { head = 0 , count = 0;}
  bool insert ( int , const Student &);
};

وبعد ذلك عرّفت الفنكشن

Node *set_position(int)

بهذه الطريقة

Node* List::set_position(int pos)

يخرج لي الكمبايلر مجموعة من الأخطاء ..

--------------------Configuration: List - Win32 Debug--------------------
Compiling...
List.cpp
D:\Unevirsty\Csc113\LAB\Home Work's\LAB #5\Q1\List.cpp(3) : error C2143: syntax error : missing ';' before '*'
D:\Unevirsty\Csc113\LAB\Home Work's\LAB #5\Q1\List.cpp(3) : error C2501: 'Node' : missing storage-class or type specifiers
D:\Unevirsty\Csc113\LAB\Home Work's\LAB #5\Q1\List.cpp(4) : error C2501: 'set_position' : missing storage-class or type specifiers
D:\Unevirsty\Csc113\LAB\Home Work's\LAB #5\Q1\List.cpp(4) : error C2556: 'int *__thiscall List::set_position(int)' : overloaded function differs only by return type from 'class List::Node *__thiscall List::set_position(int)'
        d:\unevirsty\csc113\lab\home work's\lab #5\q1\list.h(23) : see declaration of 'set_position'
D:\Unevirsty\Csc113\LAB\Home Work's\LAB #5\Q1\List.cpp(4) : error C2371: 'set_position' : redefinition; different basic types
        d:\unevirsty\csc113\lab\home work's\lab #5\q1\list.h(23) : see declaration of 'set_position'
D:\Unevirsty\Csc113\LAB\Home Work's\LAB #5\Q1\List.cpp(25) : error C2601: 'empty' : local function definitions are illegal
D:\Unevirsty\Csc113\LAB\Home Work's\LAB #5\Q1\List.cpp(34) : error C2601: 'size' : local function definitions are illegal
D:\Unevirsty\Csc113\LAB\Home Work's\LAB #5\Q1\List.cpp(39) : error C2601: 'insert' : local function definitions are illegal
D:\Unevirsty\Csc113\LAB\Home Work's\LAB #5\Q1\List.cpp(73) : error C2601: 'retrieve' : local function definitions are illegal
D:\Unevirsty\Csc113\LAB\Home Work's\LAB #5\Q1\List.cpp(99) : fatal error C1004: unexpected end of file found
Error executing cl.exe.

List.obj - 10 error(s), 0 warning(s)

ما السبب ؟

وما هي الطريقة الصحيحة للإستدعاء ؟

تم تعديل هذه المشاركة بواسطة Wase3 Sadr في 19 مارس 2005 في 19:04

#2

الكلاس Node معرف داخل List لذلك عندما تكون خارج الكلاس List يجب ان تشير إلى Node كالتالي:

List::Node

حاول تعريف الفنكشن هكذا:

List::Node* List::set_position(int pos)

لكن انا شخصيا أعتقد من الأفضل لو تعرف Node بشكل عادي,و ليس داخل List. لكن هذا مجرد رأيي طبعا, و الخيار راجع إليك.

تم تعديل هذه المشاركة بواسطة hasan_aljudy في 19 مارس 2005 في 20:30

#3

أيضا نفس الشي .. الداله ستخرج لي أخطاء أكثر مما كانت تخرج لي !!

وعند إفراد الكلاس لوحده .. أيضا أخرج لي أخطاء !!

ما الحل ؟؟

#4

السلام عليكم

هذا مثال مطابق للذى تريد القيام به ولكن على ال stack بدلاً من الList المثال منقول حرفياً من كتاب Tinking in c++.

// With constructors/destructors
#ifndef STACK3_H
#define STACK3_H
class Stack {
struct Link {
void* data;
Link* next;
Link(void* dat, Link* nxt);
~Link();
}* head;
public:
Stack();
~Stack();
void push(void* dat);
void* peek();
void* pop();
};
#endif // STACK3_H ///:~

وطريقة الاستخدام فى ملف cpp

#include "Stack3.h"
#include "../require.h"
using namespace std;
Stack::Link::Link(void* dat, Link* nxt) {
data = dat;
next = nxt;
}
Stack::Link::~Link() { }
Stack::Stack() { head = 0; }
void Stack::push(void* dat) {
head = new Link(dat,head);
}
void* Stack::peek() {
require(head != 0, "Stack empty");
return head->data;
}
void* Stack::pop() {
if(head == 0) return 0;
void* result = head->data;
Link* oldHead = head;
head = head->next;
delete oldHead;
return result;
}
Stack::~Stack() {
require(head == 0, "Stack not empty");
} ///:~

والسلام

تم تعديل هذه المشاركة بواسطة احمد غريب في 20 مارس 2005 في 00:49

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

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

#5
Wase3 Sadr كتب:
أيضا نفس الشي .. الداله ستخرج لي أخطاء أكثر مما كانت تخرج لي !!

وعند إفراد الكلاس لوحده .. أيضا أخرج لي أخطاء !!

ما الحل ؟؟

إذا كانت هناك أخطاء أخرى فلا بد أنها تظهر لأسباب أخرى, يعني أخطاء في أجزاء أخرى من الكود, لكنك لم تضع لنا سوى جزء بسيط من الكود, لذلك لا أستطيع تحديد السبب,و لكنني جربت الطريقة اللتي أخبرتك بها و نجحت.

#6

يعطيكم العافيه :)

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

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