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

"already defined" كيف أتجنب هذه الأخطاء؟

مغلق
بدأه سي شارب في 21 أبريل 2003 · 11 رد · 1,292 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

لدي برنامج (بلغة سي) كان يعمل جيدا, ولكن لازدياد أسطر البرنامج أردت فصل البرنامج لعدة ملفات, بحيث تكون كل دالة بملف خاص بها...

الذي حدث أنني أنشئت ملف .h ووضعت فيه #include و #define و المتغيرات العامة, ورؤوس الدوال والتركيبات وال enum.

وقسمت البرنامج إلى ملفات , بجيث تكون كل دالة في ملف منفصل .c

وفي كل ملف أضع #include "header.h"

وعندما أردت ترجمة البرنامج أعطاني عدد هائل من الأخطاء (link error)

وكل هذه الأخطاء مفادها أن المتغير X مثلا معرف في الملف .obj

مثلا

"int errorCounter" (?errorCounter@@3HA) already defined in error.obj

مالعمل؟

[

ماهي الأشياء التي توضع في ملف ال .h؟

أين أعرف المتغيرات العامة وترويسات الدوال والتركيبات؟

]

#2

سبب هذا الخطأ أن المتغير او التابع معرف بأكثر من ملف هيدر .h أو انك عملت include لنفس الملف أكثر من مرة ولتجنب هذا الخطأ ضع تعليمة الإنكلود بين هذين الشرطين

#ifndef HEADER_H

#define HEADER_H



#include "header.h"



#endif

أو ضع قبل الإنكلود

#pragma once

ويفضل عند عمل ملف هيدر أن تضعها أيضا في بداية الملف ونهايته وتكتب التعليمات بينها

#ifndef HEADER_H

#define HEADER_H

ضع ماتريده هنا من تعريف للتوابع والمتغيرات 

#endif
#3

الله يسلمك ....

ولكن, الآن زالت أخطاء ال link وأتت أخطاء كثيرة يقول مثلا:

error C2065: 'translate1' : undeclared identifier

؟؟؟؟

مع اني معرف ال translate1 في ملف headr.

ترى أخوك يعاني من عسر في الفهم, ولذلك ياليت تتكرم وترفق مشروع فيه أكثر من ملف سي و ملف headr كي أعرف المشكلة عندي..

#4

أخي تأكد أنك سويت انكلود للملف اللي معرف فيه ال translate1 ..

واذا اردت مشروع فيه أكثر من ملف سي وهيدر فالويزارد يقوم بذلك ، اختر MFC Application عند انشائك لمشروع جديد

#5

مرة أخرى.....:o

أحبتي إلى الآن لم أتوصل لحل صحيح...

وضعت في الأسفل مثال بسيط, وأريد من أحدكم وضع كل تابع/دالة في ملف منفصل(أي ثلاث ملفات سي وواحد هيدر)

#include <stdio.h>



#define MAX 298

#define MIN 0



int nbr=0;



int ttl=0;



int add(int,int);

int sub(int,int);



int main()

{



	ttl=add(201,3);

	printf("%dn",ttl);



	ttl=sub(119,7);

	printf("%dnn%dn",ttl,nbr);

	return 0;

}



int add(int x,int y)

{

	if (x>MAX || x<MIN || y>MAX || y<MIN)

  return 0;

	nbr++;

	return x+y;

}

int sub(int x,int y)

{

	if (x>MAX || x<MIN || y>MAX || y<MIN)

  return 0;

	nbr++;

	return x-y;

}
#6
[ALIGN=RIGHT]الفزعة...
#7

استخدم

extern
#8

وكيف تستخدم هذه؟

#9

من يتكرم بالاجابة؟

سأواصل الرفع إلى أن يأتي جواب,,, أو يحذف السؤال :)

#10

أنا لا اعرف كيفه تستخدم ... لكن أخي ابو فهد وضع درس في دوال API في السي شارب وكانت تستخدم العباره extern على ما اتدكر

وأتمنى أن تحصل على ما تريد

وشكراً(f)

If you think yourself that you are nobody, you should go somewhere to find yourself

#11

أحسن شيء يابو قاسم;) إنك حاولت تساعد

أشكرك..

#12
اقتباس
أحسن شيء يابو قاسم إنك حاولت تساعد

أشكرك..

عفواً

بس اعدرني على السؤال الي بسألك ايه لاني احسه سؤال غبي !

أنا ما اعرف كيف عرفت لقبي ! لكن أنا حطيتها في المنتدى وندفن وندفنت معاه مواضيع

بس اقول كيف حصلت عليه ( سؤال غبي:o ) ؟

If you think yourself that you are nobody, you should go somewhere to find yourself

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

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

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

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

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

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