عند تفحص الشيفرة التي قدمتها، يظهر أن المشكلة تكمن في الطريقة التي تم فيها تعريف وتنفيذ الدالة العضوية graph
في ملف graph.hpp. يجب أن يكون التعريف الصحيح للدوال العضوية داخل الكلاس في الملف graph.h، ثم يمكن تنفيذها خارج الكلاس.
في حالة الشيفرة التي قدمتها، يمكن تعديل ملف graph.h ليشمل التعريف الصحيح للدالة graph
داخل الكلاس، وذلك بإضافة السطور التالية:
cpptemplate <typename T>
class graph{
public:
graph();
// أيضًا يمكن إضافة تعريف الدالة هنا داخل الكلاس:
graph(){
numVertices = 0;
graphWeight = 0;
}
private:
// باقي تعريف الكلاس...
};
ثم يمكنك حذف التعريف الزائد في ملف graph.hpp، بحيث يصبح كالتالي:
cpp#include "graph.h"
// لا حاجة لهذا التعريف هنا في ملف graph.hpp
// template
// typename graph::graph(){
// numVertices = 0;
// graphWeight = 0;
// }
بعد تعديل الكود بهذه الطريقة، يجب أن تتجنب الخطأ المُعلن في الرسالة، ويجب أن يعمل البرنامج بشكل صحيح. إن كنت بحاجة إلى مساعدة إضافية أو توضيح حول أي جزء من الشيفرة، فلا تتردد في طرح المزيد من الأسئلة.
المزيد من المعلومات
لحل مشكلتك، يجب فهم بعض المفاهيم في لغة البرمجة C++. تظهر الرسالة “error: expected unqualified-id before ‘)’ token” عندما يكون هناك خطأ في التركيب النحوي للكود.
في اللغة C++، تُعرف الدوال العضوية داخل الكلاس ولكن يجب تنفيذها خارج الكلاس. لكن، يمكن أن يتم تعريف الدوال داخل الكلاس بشكل مباشر أيضًا.
في شيفرتك، يمكن تعديل الكود بالطريقة التالية:
في ملف graph.h
:
cpptemplate <typename T>
class graph{
public:
// تعريف الدالة داخل الكلاس
graph() {
numVertices = 0;
graphWeight = 0;
}
private:
// باقي تعريف الكلاس...
};
في ملف graph.hpp
، لا داعي لتكرار تعريف الدالة، لذلك يمكن حذف الكود المتكرر:
cpp#include "graph.h"
// لا حاجة لهذا التعريف هنا في ملف graph.hpp
// template
// typename graph::graph(){
// numVertices = 0;
// graphWeight = 0;
// }
وبهذا، يمكنك تفادي الخطأ المُذكور وضمان أن تكون دوال الكلاس معرفة ومنفذة بشكل صحيح.
إذا كنت بحاجة إلى مزيد من التوضيح أو لديك أي أسئلة إضافية، فلا تتردد في طرحها.