حل مشاكل undefined reference في لغة البرمجة C++
في هذا الكود البرمجي الذي قدمته، يبدو أن هناك بعض الأخطاء التي يجب تصحيحها لضمان سلامة تنفيذ البرنامج. قد يكون الخطأ الذي تتلقاه “undefined reference to outputVLI(int*, int)” يرجع إلى عدم وجود تعريف لدالة outputVLI
، وهذا يمكن حله بتعديل اسم الدالة في الدالة output
لتكون outputVLI
.
بالإضافة إلى ذلك، يوجد بعض الأخطاء الأخرى في الكود. على سبيل المثال، في دالة inputVLI
، يجب عليك استخدام متغير الحجم size
المرسل كوسيط لتحديد حجم الدخل بدلاً من maxDigits
. وفي دالة outputVLI
، يجب استخدام size
أيضاً بدلاً من maxDigits
لتحديد حجم الطباعة.
لتصحيح الأخطاء، يمكنك تعديل الكود على النحو التالي:
cpp#include
using namespace std;
const int maxDigits = 100;
void inputVLI(int vli[], int size);
void outputVLI(int vli[], int size);
void addVLI(const int vli1[], const int vli2[], int vli3[], int size1, int size2, int& size3);
int compVLI(const int vli1[], const int vli2[], int size1, int size2);
int main()
{
int vli1[maxDigits], vli2[maxDigits], vli3[maxDigits], size1, size2, size3;
inputVLI(vli1, maxDigits);
outputVLI(vli1, maxDigits);
inputVLI(vli2, maxDigits);
outputVLI(vli2, maxDigits);
// addVLI(vli1, vli2, vli3, size1, size2, size3);
// compVLI(vli1, vli2, size1, size2);
return 0;
}
void inputVLI(int vli[], int size)
{
cout << "Enter a very long integer" << endl;
cin >> vli[size];
}
void outputVLI(int vli[], int size)
{
for (int i = size; i >= 0; i--)
cout << vli[i];
}
void addVLI(const int vli1[], const int vli2[], int vli3[], int size1, int size2, int& size3)
{
/*
for (int i = 0; i < size1 && i < size2; i++)
{
vli3[i] = vli1[i] + vli2[i];
cout << "The sum of the vli's is:" << vli3[i] << endl;
}
*/
}
int compVLI(const int vli1[], const int vli2[], int size1, int size2)
{
/*
for (int i = 0; i < size1 && i < size2; i++)
{
if (vli1[i] != vli2[i])
{
return -1; // -1 is not equal
}
}
return 1; // 1 is equal
*/
}
تحتاج أيضًا إلى تعديل تعريفات دوال addVLI
و compVLI
لتناسب الحجم المرسل إليها وتفادي حدوث أخطاء في تنفيذ البرنامج.
المزيد من المعلومات
بالطبع، دعونا نقوم بتوسيع فهمك حول الكود والمشكلة التي قد تواجهها.
في البداية، يتعين عليك فهم كيفية تعريف واستخدام الدوال في البرنامج. في الدالة inputVLI
، يتم استخدام cin
للحصول على إدخال المستخدم، ولكن يبدو أن هناك خطأ في كيفية تخزين القيمة في المصفوفة vli
، يجب أن تكون الخطوة كالتالي:
cppvoid inputVLI(int vli[], int size)
{
cout << "Enter a very long integer" << endl;
cin >> vli[size - 1]; // تخزين القيمة في العنصر الأخير من المصفوفة
}
ثم في دالة outputVLI
، تحتاج إلى استخدام size - 1
بدلاً من size
في الحلقة لطباعة العناصر بشكل صحيح.
علاوة على ذلك، يتم تعريف دالة compVLI
بشكل غير صحيح. يبدو أن هناك استخدامًا غير صحيح للدوال vli1
و vli2
، يجب أن تكون هاتين الدالتين تأخذان المصفوفات كمعاملات بدلاً من القيم الفردية. يمكنك تحديث التعريف كما يلي:
cppint compVLI(const int vli1[], const int vli2[], int size1, int size2)
{
for (int i = 0; i < size1 && i < size2; i++)
{
if (vli1[i] != vli2[i])
{
return -1; // -1 is not equal
}
}
return 1; // 1 is equal
}
أخيرًا، في دالة addVLI
، تحتاج إلى ضبط الحلقة لتكون متوافقة مع الحجم الأصغر من بين size1
و size2
. يمكنك تعديل التعريف كما يلي:
cppvoid addVLI(const int vli1[], const int vli2[], int vli3[], int size1, int size2, int& size3)
{
for (int i = 0; i < size1 && i < size2; i++)
{
vli3[i] = vli1[i] + vli2[i];
cout << "The sum of the vli's is:" << vli3[i] << endl;
}
}
بتنفيذ هذه التعديلات، يجب أن يكون لديك أساس قوي للمتابعة وتطوير برنامجك. لا تتردد في طرح أي أسئلة إضافية إذا كنت بحاجة إلى مزيد من المساعدة في هذا الصدد.