title: Visual Studio error C2061: syntax error: identifier
body: <pre><code>//Species.h
  #pragma once
  #include &lt;iostream&gt;
  #include &lt;string&gt;
  using namespace std;
  class Species
  {
  protected:
      int HP, GroundAttack, AirAttack, MoveMode;
  public:
  };
  
  // Protoss.h
  #pragma once
  #include "Species.h"
  #include "Terran.h"
  
  class Protoss : public Species
  {
  protected:
      int PS;
  public:
      virtual void Input();
      virtual void Output();
      void B_AbilityAttack_A(Terran *);
  };
  
  // Terran.h
  #pragma once
  #include "Species"
  #include "Protoss.h"
  
  class Terran : public Species
  {
  public:
      virtual void Input();
      virtual void Output();
      void A_AbilityAttack_B(Protoss *);
  };
  </code></pre>
  
  <blockquote>
    <p>"error C2061: syntax error : identifier 'Terran'"</p>
    
    <p>"error C2061: syntax error : identifier 'Protoss'"  </p>
    
    <p>error in: void A_AbilityAttack_B(Protoss *) and void B_AbilityAttack_A(Terran *)</p>
  </blockquote>
  
  <p>How to fix it?</p>
  
  <p>After fix In a method of class Protoss, I wrote:</p>
  
  <pre><code>void Protoss::B_AbilityAttack_A(Terran *x)
  {
      if (this-&gt;AbilityAttack() == 0 &amp;&amp; x-&gt;GetMoveMode() == 0)
      {
          x-&gt;SetHP(x-&gt;GetHP() - this-&gt;GAttack());
      }
      else if (this-&gt;AbilityAttack() == 1 &amp;&amp; x-&gt;GetMoveMode() == 0)
      {
          x-&gt;SetHP(x-&gt;GetHP() - this-&gt;GAttack());
      }
      else
      {
          x-&gt;SetHP(x-&gt;GetHP() - this-&gt;AAttack());
      }
  }
  </code></pre>
  
  <blockquote>
    <p>And error in x : "pointer to incomplete class type is not allowed"  </p>
  </blockquote>
  
  <p>So how to fix it?</p>