首先,关于术语的一点:在 C++ 中,术语方法从不应用于独立函数,仅应用于成员函数。
正如您在下面看到的,您的示例仅对独立函数有意义,因此使用术语“方法”非常具有误导性。
在 C++ 中,必须在使用之前声明某些内容。
对于自由函数,这意味着您不能在声明之前在文本中的某个点调用函数:
void foo() { bar(); } // NO GOOD!
void bar() {}
但是,当您编写类声明时
struct S
{
void foo() { bar(); }
void bar() {}
};
编译器(本质上)将其转换为
struct S
{
inline void foo();
inline void bar();
};
inline void S::foo() { bar(); }
inline void S::bar() {}
正如您在这个转换后的和更基本的代码中看到的那样,bar
在它被声明之前不会被调用。
简而言之,编译器在使用它之前需要知道一些东西。
最后,对于独立函数,解决问题的一种方法是重新排序声明,另一种方法是先声明bar
函数,称为前向声明。
重新排序通常会节省您的工作,因为具有前向声明意味着必须维护前向声明和定义。新手经常遇到前向声明与预期定义不同的情况,因此他们会遇到神秘的编译错误。通常最好通过重新排序定义来避免所有这些:bar
首先,因为它是由foo
.