PDA

View Full Version : 2 تا error



mamad64bit
چهارشنبه 29 آبان 1387, 09:22 صبح
من هنگام کامپایل کردن به این 2 تا error مواجه میشم و سورس کدم هم هیچ خطایی نداره
Linking overldn.exe:
Linker Warning: No module definition file specified: using defaults
Linker Error: Undefined symbol _main in library file C:\TCWIN45\LIB\cwl.lib in module winmain

mamad64bit
چهارشنبه 29 آبان 1387, 09:28 صبح
یه سوال دیگه هم دارم و اون اینه که توابعی که به یه کلاس ارجاع میکنند یعنی چی مثلا در کد زیر بودن یا نبودن & چه تاثیری رو تابع میذاره


class Time
{
public:
int &setTime();
int setTime();
...

Nima_NF
چهارشنبه 29 آبان 1387, 15:01 عصر
یه سوال دیگه هم دارم و اون اینه که توابعی که به یه کلاس ارجاع میکنند یعنی چی مثلا در کد زیر بودن یا نبودن & چه تاثیری رو تابع میذاره

در حالتی که & را می نویسید با ارجاع مقدار را بر می گرداند، یعنی مرجهی از مقدار شما که در حافظه ذخیره شده است را بر می گرداند نه یک کپی از آن را و فقط کافیست یک اشاره گر به همان نوع بسازید و طرف دوم بعد از = تابع را فراخوانی کنید تا مقدار شما به اشاره گر متصل شود، بدون نیاز به تخصیص حافظه. معمولا این کار برای برگرداندن کلاس ها یا struct و رشته و امثال آن مفید است.
ضمنا می تواند به صورت l-value نیز عمل کند، یعنی فراخوانی طرف اول و طرف دوم نیز مقداری قرار گیرد تا در آن ریخته شود(اگر مثلا متغیری از کلاس را برگرداند):



Time cTEST;
cTEST.setTime() = 12;

mamad64bit
چهارشنبه 29 آبان 1387, 17:34 عصر
با این حساب یعنی توابعی که ارجاع به یه کلاس دارند مقدار بازگشتیشون یا باید this* باشه یا توابع عضو همان کلاس این درسته؟

class Time
{
public:
int &smt(int);
..
private:
int hour;
..
}
int &Time::smt(int x)
{ ...
return *this; // return hour;
}

Nima_NF
پنج شنبه 30 آبان 1387, 00:30 صبح
لزوما خیر،
همانطور که گفتم یکی از موارد استفاده، آن است که شما مثلا رشته ای را برگردانید که می تواند جزئی از کلاس نباشد، آدرس آن برگدانده می شود و می تواند در یک اشاره گر به char قرار گیرد، البته به این شکل l-value بی کاربرد می شود، اما عمل کپی صورت نمی گیرد و نیاز نیست برای اشاره گر حافظه به طول رشته تخصیص دهیم.