PDA

View Full Version : نحوه کار با کلاس ها در چندین فایل



mscode.ir
جمعه 23 فروردین 1387, 18:18 عصر
من یه مشکل اساسی با ++C دارم ,کسی میتونه کمک کنه؟

یکی از اساسی ترین خوبی های c++ اینه که افراد بدون اینکه از پیاده سازی کلاس اطلاع داشته باشند ,بتونند از کلاس استفاده کنند.
مثلا کلاسی نوشته شده که زمان رو به دو صورت نمایش میده, کلاس time در فایل time.h تعریف شده و پیاده سازی اون در فایل time.cpp .

حالا در فایل showtime.cpp که تابع main ما قرار داره ,باید هدر فایل time.h را قرار دهیم تا بتونیم از کلاس مذکور استفاده کنیم.

مشکل من اینه که زمانی که این کار رو میکنم در کامپایل برنامه مشکلی پیش نمیاد, ولی زمان لینک ارور لینک میگیره.
و اگر در این زمان من هدر time.h رو با هدر time.cpp عوض کنم برنامه بدون هیچ مشکلی run میشه.


کامپایلرم microsoft visual studio 6.0 هست.

اگر هدر time.cpp رو بزارم که مشکلی پیش نمیاد.

من میخام اصل پنهانسازی اطلاعات رو رعایت کنم ,
الان خیلی وقته با همین سیستم دارم کار میکنم , مشکلی هم پیش نیومده.

تنها جائی که مشکل پیش میاد جائی هست که میخام از یه سورس کد آماده استفاده کنم ,اونوقت باید تمامی هدر فایل های *.h رو باید تبدیل به هر فایل *.cpp بکنم , که بعضی وقتها خیلی وقت گیره.


این eror رو میده.
--------------------Configuration: car3d - Win32 Debug--------------------
Compiling...
car3d.cpp
Linking...
car3d.obj : error LNK2001: unresolved external symbol "public: __thiscall squre::squre(void)" (??0squre@@QAE@XZ)

البته اسم ها زیاد مهم نیست مثل squre چون این رو تو کلاس تعریف کردم , مهم اینه که زمان link نمیتونه مثلا squre.h رو به squre.cpp لینک کنه و تعاریف کلاس squre که در squre.cpp تعریف شده رو پیدا کنه.

دوست دارم پیشنهاد هاتون رو بشنوم. ممنون.

sasan_vm
جمعه 23 فروردین 1387, 18:32 عصر
time.cpp هدر نیست ، معمولا در C++ تعریف کلاس و توابع ان را در 2 فایل مجزا می نویسند در مورد برنامه شما time.h هدر کلاس و time.cpp توابع کلاس است که برای استفاده از آن باید:
- یک پروژه تعریف کنید
- در هر فایلی که می خواهید از کلاس time استفاده کنید هدر time.h را include کنید
- فایل time.cpp را به پروژه اضافه کنید

mzjahromi
جمعه 23 فروردین 1387, 21:01 عصر
لطفا برای سوالات خود عنوان مناسب انتخاب کنید

Nima_NF
جمعه 23 فروردین 1387, 23:57 عصر
عنوان تغییر داده شد.

- ابتدا دقت کنید که تمامی فایل ها در برنامه اضافه شده باشند.
- هر دو فایل cpp هدر فایل .h را include کرده باشند.
- تمامی فایل های .h شامل کدهایی (با نام دلخواه ) مانند زیر باشند تا فقط یک مرتبه لینک شوند:



#ifndef TIME_H
#define TIME_H

// codes here

#endif

mscode.ir
شنبه 24 فروردین 1387, 15:06 عصر
چشم از این به بعد عنوان مربوط می‌ذارم.
خیلی ممنون.

mscode.ir
جمعه 30 فروردین 1387, 20:39 عصر
ممنون از راهنمائیت .
حالا میتونی یه توضیح بدی که :
فرض کن من 100 هدر فایل که همشونم به صورت کلاس نوشته شدند رو دانلود کردم و یه فایل main.cpp هم داریم که این 100 هدر فایل *.h رو با زبونه بی زبونی( http://www.mscode.ir/Smileys/Smileys/classic/wink.gif یعنی یه سریش رو توی همین main و خیلیاش رو هم در هدر فایل های دیگه) قرار داده.

حالا می خوام از اینها استفاده کنم , طبق گفته شما یه پروژه میسازم فایل main رو هم توش قرار میدم و همه cpp ها رو add میکنم , و بعد کامپایل میکنم و هیچ اروری هم نمیده ولی در زمان build باز هم ارور لینک میده , البته اروراش کم شده.
ارور لینک های داخلی رو میده (یعنی .h هائی که در .h های دیگه قرار داره رو نمیتونه لینک کنه) http://www.mscode.ir/Smileys/Smileys/classic/huh.gif
البته .cpp هاش رو add کردم در پروژه main

farhadamin
جمعه 30 فروردین 1387, 21:09 عصر
ارور لینک های داخلی رو میده (یعنی .h هائی که در .h های دیگه قرار داره رو نمیتونه لینک کنه) http://www.mscode.ir/Smileys/Smileys/classic/huh.gif
البته .cpp هاش رو add کردم در پروژه main
سلام دوست عزیز منظورت از .h هایی که در .h های دیگه قرار دارند چیه...چه جوری میشه یه هدر توی دیگری باشه... منظورت استفاده شدن است.... البته یادت باشه بعضی مواقع که مثلا دو تا تابع که درون یک هدر قرار دارند و یکیی از تابع ها توی دومی استفاده شده... باید اونی که توی دومی استفاده شده اول قرار داشته باشه... البته بر طبق تجربه من ....

Nima_NF
جمعه 30 فروردین 1387, 21:36 عصر
همه cpp ها رو add میکنم , و بعد کامپایل میکنم و هیچ اروری هم نمیده ولی در زمان build باز هم ارور لینک میده , البته اروراش کم شده.

با وجودی که جمله فوق تناقض دارد ، اما دقت کنید که همه فایل ها باید به پروژه اضافه شده باشند چه .h چه .Cpp

برای اینکه از شلوغ کاری در برنامه خود جلوگیری کنید یک فایل با نام headers.h بسازید و همه هدر فایل های برنامه (همه .h ها) را که فایل main شما نیاز به آن ها دارد در آن قرار دهید و فقط همان یک headers.h را در بالای صفحه برای فایل main خود include کنید. هر فایل cpp دیگر نیز به صورت جداگانه باید فایل های .h مورد استفاده خود را include کنند.