最初に、用語についてのポイント: 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
宣言される前に呼び出されません。
つまり、コンパイラは、使用する前に何かを知る必要があります。
最後に、独立した関数の場合、問題を修正する 1 つの方法は、宣言を並べ替えることです。また、別の方法は、前方宣言と呼ばれる関数を最初に宣言することです。bar
前方宣言を持つことは、前方宣言と定義の両方を維持する必要があることを意味するため、通常、並べ替えにより作業が節約されます。初心者は、前方宣言が意図した定義と異なる状況に陥ることがよくあり、謎のコンパイル エラーが発生します。一般に、定義を並べ替えるだけで、これらすべてを回避するのが最善です。bar
最初に、 によって呼び出されるためfoo
です。