私は C++ を学び始めています。IDE コードブロックでは、次のようにコンパイルされます。
#include <iostream>
using namespace std;
struct A {};
struct B {
A a;
}
void hi() {
cout << "hi" << endl;
}
int main() {
hi();
return 0;
}
しかし、これは当てはまりません:
struct B {
A a;
}
struct A {};
int main() {
hi();
return 0;
}
void hi() {
cout << "hi" << endl;
}
次のエラーが発生します:
error: 'A' does not name a type
error: 'hi' was not declared in this scope
C++ ではクラス/関数の順序は重要ですか? 重要ではないと思いました。問題を明確にしてください。
ベストアンサー1
はい、少なくとも宣言する実際の定義が後になってからであっても、クラス/関数を使用/呼び出す前に定義します。
そのため、クラス/関数をヘッダー ファイルで宣言し、次に#include
cpp ファイルの先頭で宣言することがよくあります。クラス/関数はすでに効果的に宣言されているため、任意の順序で使用できます。
あなたの場合はこれを実行できたことに注意してください。(実例)
void hi(); // This function is now declared
struct A; // This type is now declared
struct B {
A* a; // we can now have a pointer to it
};
int main() {
hi();
return 0;
}
void hi() { // Even though the definition is afterwards
cout << "hi" << endl;
}
struct A {}; // now A has a definition