title: Issues with #includes
body: <p>I thought  I could use #pragma once to solve my problems but it's not working.</p>
  
  <p>Here is my issue.</p>
  
  <p>I have Agui.h which I wanted to be my main header which everything includes:
  this is it:</p>
  
  <pre><code>#pragma once
  
  /*
      This header includes all the required headers
      required for Agui
  
        Author: Josh
  */
  
  //Standard library (STL)
  
  #include &lt;stdlib.h&gt;  
  #include &lt;iostream&gt;
  #include &lt;string&gt;
  #include &lt;sstream&gt;
  #include &lt;vector&gt;
  #include &lt;list&gt;
  #include &lt;algorithm&gt;
  #include &lt;queue&gt;
  
  //C runtime
  #include &lt;cmath&gt; 
  #include &lt;ctime&gt;
  
  //Allegro 5 
  #include &lt;allegro5/allegro.h&gt;
  #include &lt;allegro5/allegro5.h&gt;
  #include &lt;allegro5/allegro_image.h&gt;
  #include &lt;allegro5/allegro_primitives.h&gt;
  #include &lt;allegro5/allegro_font.h&gt;
  #include &lt;allegro5/allegro_ttf.h&gt;
  
  #include "AguiBaseTypes.h"
  #include "AguiWidgetBase.h"
  </code></pre>
  
  <p>AguiBaseTypes.h looks like this:</p>
  
  <pre><code>#pragma once
  #include "Agui.h"
  #define AguiBitmap ALLEGRO_BITMAP
  
  /*
     This header contains classes for basic types.
     These include:
     Point,
     Size, 
     Rectangle,
     Color
     and their floating equivalents
  
        Author: Josh
  */
  
  
  //integer Point class
  class AguiPoint {
      int x;
      int y;
  public:
      int getX();
      int getY();
      void setX(int x);
      void setY(int y);
      void set(int x, int y);
      AguiPoint(int x, int y);
      AguiPoint();
      std::string toString();
      std::string xToString();
      std::string yToString();
  
  };
  
  //floating version of Agui Point
  class AguiPointf {
      float x;
      float y;
  public:
      float getX();
      float getY();
      void setX(float x);
      void setY(float y);
      void set(float x, float y);
      AguiPointf(float x, float y);
      AguiPointf(AguiPoint p);
      AguiPointf();
      std::string toString();
      std::string xToString();
      std::string yToString();
  };
  
  //Integer rectangle class
  class AguiRectangle {
      int x;
      int y;
      int width;
      int height;
  public:
  
      bool isEmpty();
      int getTop();
      int getLeft();
      int getBottom();
      int getRight();
      AguiPoint getTopLeft();
      AguiPoint getBottomRight();
  };
  
  class AguiColor {
      unsigned char r;
      unsigned char g;
      unsigned char b;
      unsigned char a;
  void verifyColorBounds();
  public:
      AguiColor(int r, int g, int b, int a);
      AguiColor(float r, float g, float b, float a);
      AguiColor();
      int getR();
      int getG();
      int getB();
      int getA();
  };
  </code></pre>
  
  <p>and the problematic one, AguiWidgetBase.h</p>
  
  <pre><code>#pragma once
  #include "Agui.h"
  
  
  
  /*
      This is the base class for all widgets
  
        Author: Josh
  */
  class AguiWidgetBase
  {
      //variables
      AguiColor tintColor;
      AguiColor fontColor;
      //private methods
      void zeroMemory();
      virtual void onPaint();
      virtual void onTintColorChanged(AguiColor color);
      void (*onPaintCallback)(AguiRectangle clientRect);
      void (*onTintColorChangedCallback)();
  
  
  public:
      AguiWidgetBase(void);
      ~AguiWidgetBase(void);
      void paint();
      void setTintColor(AguiColor color);
      AguiColor getBackColor();
  };
  </code></pre>
  
  <p>The compiler is not seeing AguiBaseTypes for AguiWidgetBase. This causes</p>
  
  <pre><code>Warning 13  warning C4183: 'getBackColor': missing return type; assumed to be a member function returning 'int' c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h  29
  Error   2   error C4430: missing type specifier - int assumed. Note: C++ does not support default-int   c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h  14
  Error   3   error C4430: missing type specifier - int assumed. Note: C++ does not support default-int   c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h  14
  Error   5   error C4430: missing type specifier - int assumed. Note: C++ does not support default-int   c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h  15
  Error   6   error C4430: missing type specifier - int assumed. Note: C++ does not support default-int   c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h  15
  Error   11  error C4430: missing type specifier - int assumed. Note: C++ does not support default-int   c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h  29
  Error   12  error C4430: missing type specifier - int assumed. Note: C++ does not support default-int   c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h  29
  Error   1   error C2146: syntax error : missing ';' before identifier 'tintColor'   c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h  14
  Error   10  error C2146: syntax error : missing ';' before identifier 'getBackColor'    c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h  29
  Error   4   error C2146: syntax error : missing ';' before identifier 'fontColor'   c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h  15
  Error   8   error C2061: syntax error : identifier 'AguiRectangle'  c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h  20
  Error   7   error C2061: syntax error : identifier 'AguiColor'  c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h  19
  Error   9   error C2061: syntax error : identifier 'AguiColor'  c:\users\josh\documents\visual studio 2008\projects\agui\alleg_5\agui\AguiWidgetBase.h  28
  </code></pre>
  
  <p>How could I resolve this? Also is there a way to do it like I want where Agui.h is included everywhere, instead of individual includes which can get confusing over time?</p>
  
  <p>Thanks</p>