PDA

View Full Version : Unresolved external ...



baboozadeh
پنج شنبه 08 دی 1384, 04:18 صبح
سلام دوستان! یه نگاهی به کدای زیر بندازین :


time1.h

#ifndef TIME1_H
#define TIME1_H
class Time{
public:
Time();
void setTime(int, int, int);
void printMil();
void printStd();
private:
int hrs;
int min;
int sec;
};
#endif


time1.cpp

#include <iostream>
#include "time1.h"

Time::Time()
{
hrs=min=sec=0;
}

void Time::setTime(int h, int m, int s)
{
hrs=(h<24 && h>=0) ? h:0;
min=(m<60 && m>=0) ? m:0;
sec=(s<60 && s>=0) ? s:0;
}

void Time::printMil()
{
cout<<(hrs<10 ? "0":"")<<hrs<<" : "
<<(min<10 ? "0":"")<<min;
}

void Time::printStd()
{
cout<<((hrs==0 || hrs==12) ? 12: hrs%12)<<" : "
<<(min<10 ? "0":"")<<min<<" : "
<<(sec<10 ? "0":"")<<sec<<" "
<<(hrs>12 ? "PM":"AM");
}

user.cpp

#include <iostream>
#include <conio>
#include "time1.h"

int main()
{
Time tm;
cout<<"Before initialize via setTime()"<<endl;
tm.printMil();
tm.printStd();
tm.setTime(3,5,56);
cout<<"\nAfter initialize via setTime()"<<endl;
tm.printMil();
tm.printStd();
getch();
return 0;
}




user.ccp رو که کامپایل میکنم error میده:

Unresolved external 'Time::Time()' refrenced from ..\user.obj

این Error رو در مورد تمام متد ها میده و برنامه اجـــرا نمیشه!!! کسی میدونه چشه؟!

از وقتی که گذشتین ممنون ;)

Marine
پنج شنبه 08 دی 1384, 09:03 صبح
من کد شما رو کامپایل کردم اشکال بزرگی نداشت
احتمالا در ساخت یک پروژه مشکل داری
از چه کامپایلری استفاده میکنی ؟

sh_roohani
پنج شنبه 08 دی 1384, 14:18 عصر
سلام،
ببین baboozadeh جان، احتمالا باید خود فایلهای time1.h و time1.cpp رو هم به پروژه ت اضافه کنی. تنها #include کافی نیست. توی Visual C++ 6.0 که من کار می کنم که اینطوریه. به نظر منطقی می رسه که توی محیط های دیگه هم همینطور باشه.

baboozadeh
پنج شنبه 08 دی 1384, 14:49 عصر
والا من از Borland C++ v.5.2 استفاده میکنم،
تا همین دیشب کامپایلر خوبی بود. :عصبانی++:

sh_roohani
پنج شنبه 08 دی 1384, 15:36 عصر
ببین عزیز جان، هنوزم کامپایلر خوبیه. همونطور که Marine هم گفتن، این مشکل احتمالا مربوط می شه به ساختار پروژه. حالا این دو تا فایل time1.h و time1.cpp رو به پروژه اضافه کردی یا نه؟

C++Lover
جمعه 09 دی 1384, 04:19 صبح
سلام.
در تأیید فرمایشات دوستان:
وقتی که یک هدر فایل رو توی یه فایل دیگه include می کنی هنگام کامپایل کردن اون فایل توابعی که داخل فایل استفاده شده اند و در هدر فایل بصورت prototype معرفی شده اند توسط کامپایلر به صورت external معرفی می شوند و جای آنها خالی می ماند و این وظیفه linker است که جاهای خالی رو پر کند. linker این کار را با استفاده از فایلهای کامپایل شده دیگر (مثل فایل cpp. کلاستون) انجام می دهد.
حالا اگر این فایل که شامل تعریف توابع است کامپایل نشده و به linker معرفی نگردد ، linker همان پیغام خطای Unresolved External که شما دریافت کرده اید رو می دهد. در محیطهای برنامه نویسی مثل ++Borland C یا ++Microsoft C یا غیره شما لازم نیست از کامپایلر بخواهید که چه فایلهایی را کامپایل کند و به linker معرفی کند. کلیه فایلهایی (اعم از cpp. یا h. یا غیره) که به پروژه اضافه شده اند با دادن دستور کامپایل ، کامپایل شده و به linker معرفی می گردند تا خروجی اجرایی شما ایجاد شود. حال اگر فایلی که شامل تعریف توابع باشد (مثل فایل cpp. شما) به پروژه اضافه نگردد آنگاه کامپایل نشده و لینکر نیز نمی تواند توابع external معرفی شده توسط کامپایلر را جایگزین کند. بنابراین خطای Unresolved External را می دهد.

baboozadeh
جمعه 09 دی 1384, 08:33 صبح
دوستان خیلی مچـــکرم ، میرم سزاغش الآن ;)
ببینیم چی میشه