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

(سلسلة التصرفات الغريبة) تصرف غريب جديد ! اصدار جديد

مغلق
بدأه آل عيد في 22 يوليو 2001 · 5 رد · 492 مشاهدة · في ارشيف قسم C/C++
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله .

في الحقيقة أود ألا تخافوا من العنوان لأنه مزحة ;) .

ولكن لم أستطع تفسير شيء غريب في ++C ولكنه موجود في كل الكومبايلرات فأرجو التوضيح من الأخوة الأعزاء ( الله يساعدكم ما يجي مني إلا الأسئلة المعقدة ) :

[Code2]

#include

class Test

{

public:

Test()

{

cout << "Default.n";

}

Test(int A)

{

cout << "The other.n";

}

void DoSomething()

{

cout << "Some thing.n";

}

};

void main()

{

Test test1;

Test test2(3);

Test test3();

test1.DoSomething (); //OK

test2.DoSomething (); //OK

// test3.DoSomething (); //Error

return;

}

[/Code2]

عندما كتبت ()Test test3 انتظرت رسالة خطأ ولكن تفاجأت أن الشفرة صحيحة ، ولكن كما هو واضح من الشفرة لم يعتبره VC متغيرا من نوع الفئة ، كما أن OutPut للشفرة أوضح أن الباني استدعي مع المتغير test1 و test2 فقط ، فهل من الممكن من الأخوة الأعزاء التوضيح وشكرا لكم .

أخوكم ،

#2

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

يبدو أن ال Compiler يفهم من هذا التصريح

Test test3();

أنه تصريح عن تابع Function Prototype و الدليل أنه لا يتعرف على test3 على أنه متحول و لكن الغريب إذا كان هذا التصريح هو تصريح عن تابع فيجب أن يعطي ال Compiler خطأ لأن Function Prototype يجب أن يكون في قسم ال General ؟؟!!

مع التحيات.

#3

Hello ..

"there aren't any syntax error in your code, but it seem to that you should aske some one here to explain the Variable and Function Scope to you, coz after that you must tell us What is the Error by yourself ,,, if not i will take 5 marks "

That what has happend to me in the Universty when i aske the same Q :-)

anyway the answer is that , Test test3(); is a prototype function for a function which return a Test object as return value and you can't use it outside the main function scope ,, that's all

Kind Regard

#4

الأخوة الأعزاء

في الحقيقة قبل أن أكتب الموضوع خطر ببالي أنه اعتبرها إعلان عن وظيفة ولذلك قمت بإضافة البدي لها {} وظهر لي الخطأ رقم C2601 وعندما راجعت الخطأ في مكتبة MSDN وجدت أن الخطأ سببه تعريف وظيفة داخل وظيفة وهذا معناه أن Prototype للوظيفة يفترض أن يولد هذا الخطأ وهذا ما لم يحدث لدى أتصور أنه خطأ في الكومبايلر والله أعلم .

#5

Hello ..

heeeeey , there are different between the following

Function Prototype

Function Defintion

function prototype tell the compiler that, there are a function

with this name ,it's return this type and take the following argments, it's like variable declartion

in the Function Defintion you write what you want this function to do and you cann't put it inside another function defintion

Kind Regard

#6

أعتقد إن كلامك صحيح واعذرني أنا لازلت مبتدئ ولاأعرف إلا ما قرأته في الكتاب اللي عندي ، وما لاحظت الفرق .

عموما شكرا للأخوة على التوضيح .

أخوكم،

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

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

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

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

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

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