البرمجة

حلول لخطأ ‘invalid use of void’ في C++ باستخدام المتغيرات النصية ومكتبة Windows.h

في البداية، يظهر أن الرمز الذي تقدمه يعاني من خطأ في استخدام “void”. لحل هذا الخطأ، دعونا نلقي نظرة عميقة على الشيفرة.

يبدو أنك تحاول استخدام دالة GetTickCount() داخل الدالة scenario1() دون تعريف الدالة أو استيراد المكتبة المناسبة. يمكنك تضمين مكتبة بدلاً من التعليق “//#include ” الذي تم تعليقه في الكود. يمكنك فعل ذلك ببساطة عن طريق إلغاء تعليق هذا السطر:

cpp
#include

بعد إصلاح هذا الخطأ، يبدو أن هناك بعض التعقيدات في الشيفرة. يُفضل دائمًا تعريف الدوال والمتغيرات بشكل صحيح، وتجنب استخدام “using namespace std;” في مستوى عالٍ من الملف. بدلاً من ذلك، يمكنك استخدام “std::” قبل كل استخدام لأعضاء مكتبة STL.

بالإضافة إلى ذلك، يظهر أن هناك جزءًا مفقودًا في الشيفرة بعد “// THE ABOVE LINE – THE LAST ONE IN THIS PART OF CODE – IS THE LINE I GET THE ERROR!!!”، يجب عليك توفير الجزء المفقود لكي يتسنى لنا مساعدتك بشكل أفضل.

لاحظ أيضاً أنك تستخدم دالة GetTickCount() التي تنتمي إلى واجهة برمجة تطبيقات Windows. إذا كنت تستهدف بيئة غير ويندوز، يفضل استخدام وسيلة أخرى لقياس الوقت، مثل chrono في C++11.

لذا، يمكنك تعديل الشيفرة بشكل مشابه للتالي:

cpp
#include #include #include #include #include #include #include #include #include // #include // يمكن حذف هذا إذا كنت لا تستخدمه using namespace std; // A struct describing a product. typedef struct Products { string category; string name; float price; } Product; inline void scenario1(int num_cashiers) { vector products; vector> customers; vector>> cashiers(num_cashiers); // double start = GetTickCount(); // إزالة هذا إذا كنت لا تستخدم ويندوز vector<int> total_products(num_cashiers); list categories; list<float> categories_prices(categories.unique().size()); // السطر السابق هو الذي يظهر فيه الخطأ حسب تعليقك، يفترض أن تقوم بتعديله // باقي الشيفرة... }

تأكد من توفير الجزء المفقود لنتمكن من تقديم مساعدة أفضل.

المزيد من المعلومات

بالتأكيد، دعونا نوسع قليلاً في الشرح ونقدم بعض التوجيهات الإضافية.

أولاً وقبل كل شيء، يُفضل دائمًا استخدام تصريحات الـ #include فقط للمكتبات التي تحتاجها في كودك. في الكود الحالي، لا يبدو أن هناك حاجة لاستخدام #include و #include ، لذلك يمكنك حذفهما إذا لم يكونان ضروريين.

ثانيًا، يظهر أنك قد قمت بتعريف هيكل البيانات “Products” باستخدام typedef. يمكنك استخدام using لتبسيط الكود أكثر، على سبيل المثال:

cpp
using Product = struct { string category; string name; float price; };

هذا يجعل التعريف أقل تعقيدًا ويجعل الكود أكثر قراءة.

ثالثًا، من الجيد دائمًا تجنب استخدام تعليمة “using namespace std;” في الأكواد الكبيرة. هذا يساعد في تجنب تعارضات الأسماء، ويجعل من السهل فهم من أي مكتبة يأتي كل شيء. بدلاً من ذلك، قم باستخدام “std::” قبل الكلاسات والدوال التي تنتمي إلى مكتبة STL، مثل:

cpp
std::vector products; std::vector> customers; // وهكذا...

أخيرًا، عند تحديد المصفوفات، يمكنك استخدام قيمة ابتدائية لتحديد حجمها. على سبيل المثال:

cpp
std::vector>> cashiers(num_cashiers, std::vector>());

هذا سيقوم بتعيين حجم المصفوفة الخارجية (cashiers) إلى num_cashiers والقواعد البيانية لكل نوع (customers) ستكون فارغة في البداية.

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

زر الذهاب إلى الأعلى