为什么在定义之前调用这些函数?

时间:2012-07-14 18:01:58

标签: c++

这是时间函数的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)
{ ....

3 个答案:

答案 0 :(得分: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
}

答案 1 :(得分:2)

大概是因为他们声明在某处(例如在头文件中),这才是重要的。

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

答案 2 :(得分:0)

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

相关问题