[英]How come these functions are called before being defined?
這是時間函數的cpp。 代碼在此time.cpp上定義了time.h文件的函數。 我的問題是:如果之后定義了這個函數中的函數,那么這個函數定義怎么可能呢? 謝謝
void Time::setTime(int hour, int minute, int second)
{
sethour(hour);
setminute(minute);
setseconds(seconds);
}
void Time::sethour( int h)
{ ....
您不需要定義來調用函數,您只需要聲明。 編譯器對單獨的聲明很滿意。 鏈接器需要將生成的代碼,它需要的定義,但是當你定義它們,只要你做到這一點並不重要。
在您的情況下,每個成員函數的聲明對所有其他成員函數都是可見的,即使在之后的類定義中也是如此:
class Time
{
void setTime(); //setTime knows about sethour even if it's before
void sethour();
};
在類之外,這不成立,這意味着在使用方法之前需要聲明。 宣言只是原型:
void foo();
void goo()
{
foo(); //can call foo here even if it's just declared and not defined
}
大概是因為它們被聲明在某個地方(例如在頭文件中),這才是重要的。
最好想象編譯器以“一次通過”的方式運行; 它從上到下線性處理您的代碼。 因此,它需要知道函數在使用之前是存在的(即它們的名稱,參數和返回類型),以便確定調用者沒有做無效的事情。 但實際的功能定義(即其主體)與此任務無關。
您可以選擇何時定義它們。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.