Putting it all together:
How to best arrange C++ source and header files

by Ben Dilts

When I first began to learn C++ about a year ago, I was used to the good old-fashioned one-source-file model. It took me weeks to figure out how C++ arranged and compiled its source and header files. It took me over a month to figure out how to use this arrangement to create globals instantly. I am writing this to save the other beginners out there the heartache.

Here is my basic model that I use in all my applications:

------------------------------------------------------------------------------ Globals.h is the only header file included in any source file - here is how it's set up inside: ------------------------------------------------------------------------------ #ifndef MadeIncludes //if we haven't done this where this file can see it, then... #define SCREENX = 640 #define SCREENY = 480 //and other app-wide #defines #include <windows.h> #include <ddraw.h> //and other system or lib includes #include "creature.h" //class header or some function prototypes enum Enumeration{E_THINGY1, E_THINGY2}; #define MadeIncludes #endif extern int globalint; extern char globalstring[50]; //and other globals ------------------------------------------------------------------------------ Winmain.cpp (or other main() or winmain() module) ------------------------------------------------------------------------------ #include "globals.h" int globalint; char globalstring[50]; //and other globals //and then the rest of the main file's source code ------------------------------------------------------------------------------ Creature.cpp is my implementation for Creature.h that's included in globals.h ------------------------------------------------------------------------------ #include "globals.h" //you see, this now has access to all globals and header files class creature { int x; int y; //whatever }; //and other classes/structs void MoveCreature(int newx, int newy); //and other various procedures ------------------------------------------------------------------------------

As you can see from this setup, you can add a fully application-wide global simply by declaring it in the winmain.cpp and then putting it in the globals.h file with "extern" in front of it! Also, every file in the entire project can access every global, function, class, enumeration, or whatever you want! To add a new source file (say, another class), all you have to do is create the files, add #include "newclass.h" with the other #includes in globals.h, put #include "globals.h" in newclass.cpp, and your new files are instantly plugged into the rest of the application's functionality and data.

I hope this helped you guys. Questions, comments, whatever, e-mail me at benbeandogdilts@cs.com. Visit my web page at www.geocities.com/benbeandogdilts. Have fun, guys!

Discuss this article in the forums

Date this article was posted to GameDev.net: 11/4/2000
(Note that this date does not necessarily correspond to the date the article was written)

See Also:
Sweet Snippets

© 1999-2011 Gamedev.net. All rights reserved. Terms of Use Privacy Policy
Comments? Questions? Feedback? Click here!