title: C++ trying to use #ifndef and #include statements
body: <p>Ok, so I'm a HTML/Javascript/PHP professional, but I'm trying to learn C++.  I'm still a newbie at it, and I have a C++ programming project that I have errors with.</p>
  
  <p>The file that contains int main() is 'football.cpp', and I have .h and .cpp files for three classes that I have to use: Game, Team, and Date.  Each instance of Team contains a vector of Games, and each Game contains a Date.  Date does not contain instances of any other class.</p>
  
  <p>I am trying to find a way to use #include and #ifndef statements at the tops of the files so that I don't get errors when I compile, but I haven't found a combination that works.  I am not sure if there are other bugs.  Here's my current #include sections, not counting other libraries:</p>
  
  <p>football.cpp</p>
  
  <pre><code>#include "game.h"
  #include "team.h"
  #include "date.h"
  </code></pre>
  
  <p>team.h</p>
  
  <pre><code>#ifndef __game_h_
  #define __game_h_
  #endif
  </code></pre>
  
  <p>team.cpp</p>
  
  <pre><code>#include "team.h"
  #ifndef __game_h_
  #define __game_h_
  #endif
  </code></pre>
  
  <p>game.h</p>
  
  <pre><code>#ifndef __date_h_
  #define __date_h_
  #endif
  </code></pre>
  
  <p>game.cpp</p>
  
  <pre><code>#include "game.h"
  #ifndef __date_h_
  #define __date_h_
  #endif
  </code></pre>
  
  <p>date.cpp</p>
  
  <pre><code>#include "date.h"
  </code></pre>
  
  <p>I use Cygwin g++ compiler, and the line I use to compile it is:</p>
  
  <pre><code>g++ football.cpp team.cpp game.cpp date.cpp -o football.exe
  </code></pre>
  
  <p>Here are all the errors I get: (WARNING, WALL OF TEXT)</p>
  
  <pre><code>$ g++ football.cpp team.cpp game.cpp date.cpp -o football.exe
  
  In file included from football.cpp:9:0:
  game.h:15:96: error: ‘Date’ has not been declared
  game.h:24:1: error: ‘Date’ does not name a type
  game.h:37:1: error: ‘Date’ does not name a type
  football.cpp: In function ‘int main(int, char*)’:
  football.cpp:65:70: error: no matching function for call to ‘Game::Game(std::string&amp;, std::string&amp;, int [5], int [5], Date&amp;)’
  game.h:15:1: note: candidates are: Game::Game(std::string, std::string, const int, const int*, int)
  game.h:14:1: note: Game::Game()
  game.h:10:12: note: Game::Game(const Game&amp;)
  In file included from team.cpp:4:0:
  team.h:24:8: error: ‘Game’ was not declared in this scope
  team.h:24:12: error: template argument 1 is invalid
  team.h:24:12: error: template argument 2 is invalid
  team.cpp: In member function ‘float Team::getStat3()’:
  team.cpp:36:26: error: request for member ‘size’ in ‘((Team*)this)-&gt;Team::games’, which is of non-class type ‘int’
  team.cpp:37:21: error: invalid types ‘int[int]’ for array subscript
  team.cpp:37:50: error: invalid types ‘int[int]’ for array subscript
  team.cpp:38:21: error: invalid types ‘int[int]’ for array subscript
  team.cpp:38:47: error: invalid types ‘int[int]’ for array subscript
  team.cpp:38:76: error: invalid types ‘int[int]’ for array subscript
  team.cpp:38:106: error: invalid types ‘int[int]’ for array subscript
  team.cpp: In function ‘bool compare2(Team, Team)’:
  team.cpp:45:39: error: request for member ‘size’ in ‘t1.Team::games’, which is of non-class type ‘const int’
  team.cpp:46:39: error: request for member ‘size’ in ‘t2.Team::games’, which is of non-class type ‘const int’
  team.cpp:50:17: error: request for member ‘size’ in ‘t1.Team::games’, which is of non-class type ‘const int’
  team.cpp:50:35: error: request for member ‘size’ in ‘t2.Team::games’, which is of non-class type ‘const int’
  team.cpp:52:24: error: request for member ‘size’ in ‘t1.Team::games’, which is of non-class type ‘const int’
  team.cpp:52:43: error: request for member ‘size’ in ‘t2.Team::games’, which is of non-class type ‘const int’
  team.cpp: In function ‘bool compare3(Team, Team)’:
  team.cpp:62:29: error: passing ‘const Team’ as ‘this’ argument of ‘float Team::getStat3()’ discards qualifiers
  team.cpp:63:29: error: passing ‘const Team’ as ‘this’ argument of ‘float Team::getStat3()’ discards qualifiers
  In file included from game.cpp:5:0:
  game.h:15:96: error: ‘Date’ has not been declared
  game.h:24:1: error: ‘Date’ does not name a type
  game.h:37:1: error: ‘Date’ does not name a type
  game.cpp: In constructor ‘Game::Game()’:
  game.cpp:26:3: error: ‘date’ was not declared in this scope
  game.cpp:26:15: error: ‘Date’ was not declared in this scope
  game.cpp: At global scope:
  game.cpp:29:94: error: ‘Date’ has not been declared
  game.cpp:29:1: error: prototype for ‘Game::Game(std::string, std::string, int*, int*, int)’ does not match any in class ‘Game’
  game.h:10:12: error: candidates are: Game::Game(const Game&amp;)
  game.h:15:1: error: Game::Game(std::string, std::string, const int*, const int*, int)
  game.cpp:13:1: error: Game::Game()
  game.cpp: In member function ‘int Game::getVisitingScore(int) const’:
  game.cpp:80:10: error: ‘visitingScores’ was not declared in this scope
  game.cpp: At global scope:
  game.cpp:94:1: error: ‘Date’ does not name a type
  </code></pre>
  
  <p><br />
  Will edit if further clarification is needed, although I don't think it will be.</p>
  
  <p>Any help would be vastly appreciated.</p>