私は何ヶ月も自分でこれを理解しようとしてきましたが、それは誇張ではありません.
物事が複雑になると物事が壊れて範囲外になる傾向があり、これに対する答えがどこにも見つからないため、私がしていない方法を使用すると汚いと感じます。
次のようなプロジェクト構造があります。
Project-Directory/
main.cpp
makefile
SDLMain.h // SDL libraries required to be in the project directory.
SDLMain.m // SDL libraries required to be in the project directory.
--- gamestate/
------ clean.cpp
------ gamestate.cpp
------ gamestate.h
------ init.cpp
--- graphics/
------ graphics.h
------ // more .cpp files
--- logic/
------- logic.h
------- // more .cpp files
--- character
------- character.h
------- // more .cpp files
main.cpp
私は持っています:
// C++ Libraries
#include <iostream>
// Graphical Libraries
//#include <SDL/SDL.h>
//#include <SDL/SDL_opengl.h>
// Custom Libraries
#include "character/character.h"
#include "logic/logic.h"
#include "graphics/graphics.h"
#include "gamestate/gamestate.h"
文字やグラフィックなどのすべての .cpp ファイルには、フォルダーと同じ名前を共有するそれぞれのヘッダー ファイルが含まれています。つまりclean.cpp
、gamestate.cpp
およびinit.cpp
すべてが含まれますgamestate.h
。
各フォルダーには、最近 .cpp ごとに 1 つのヘッダー ファイルから再編成された 1 つのヘッダー ファイルしかありません。
基本的に、この新しい、より構造化されたシステムでは、プロジェクトをコンパイルしようとするとスコープ エラーが発生します。
私のヘッダファイルが後にインクルードされ#include <iostream>
、SDLライブラリがmain.cpp
.
これをすべてのヘッダーファイルに挿入してエラーを解決しました:
// C++ Libraries
#include <iostream>
// Graphical Libraries
#include <SDL/SDL.h>
#include <SDL/SDL_opengl.h>
しかし、私は同じことを何度も何度も含めています。これは確かに悪い習慣です。
これだけでなく、関数 ingamestate.h
によって使用されるプロトタイプが含まれており、 in がbefore に含まれていても暗黙的にinを含めない限り、スコープ エラーが発生します。gamestate.cpp
logic.cpp
logic.h
gamestate.h
logic.h
main.cpp
gamestate.h
私#include
は、ヘッダー ファイルの内容をスコープとそれがプロトタイプ化する関数にドラッグして、コンパイラが何を期待するかを知ることを意図していると考えました。
スコープと関数が存在しないというエラーが表示されるのはなぜですか?
global.h
そこに#include
すべてのSDLなどを作成する必要<iostream>
がありますか?
でプロトタイプ化された関数に、logic.h
後で に含まれる別のファイルからアクセスできないのはなぜmain.cpp
ですか?