5

这是时间函数的 cpp。代码在这个 time.cpp 上定义了一个 time.h 文件的功能。我的问题是:如果这个 fct 中的函数是在之后定义的,那么这个函数定义怎么可能呢?谢谢

void Time::setTime(int hour, int minute, int second)
{
    sethour(hour);
    setminute(minute);
    setseconds(seconds);
}

void Time::sethour( int h)
{ ....
4

3 回答 3

7

调用函数不需要定义,只需要声明。编译器对单独的声明感到满意。链接器需要生成代码,并且需要定义,但是什么时候定义它们并不重要,只要你这样做。

在您的情况下,每个成员函数的声明对所有其他成员函数都是可见的,即使在类定义中它是在之后出现的:

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
}
于 2012-07-14T18:03:21.917 回答
2

大概是因为它们是在上面的某个地方声明的(例如在头文件中),这才是重要的。

最好想象编译器以“一次性”的方式运行;它从上到下线性处理您的代码。因此,在使用函数之前,它需要知道函数的存在(即它们的名称、参数和返回类型),以便确定调用者没有做一些无效的事情。但实际的函数定义(即它的主体)与此任务无关。

于 2012-07-14T18:03:15.820 回答
0

您可以选择何时定义它们。

于 2012-07-14T18:06:13.600 回答