title: C++ make error: object_var has not been declared
body: <blockquote>
    <ul>
    <li>You could have forgot to include problemclass.h from the file where you are using ProblemClass.</li>
    <li>You could have misspelled the name of ProblemClass either in its own header file or in the place where you are using it. This can be<br>
    hard to spot if it is a capitalization error such as writing
    Problemclass or problemClass instead of ProblemClass.</li>
    <li>You could have copy-pasted your inclusion guard #defines from one header file to another and then forgot to change the defined names.
    Then only the first of those two included header files would take
    effect.</li>
    <li>You could have placed ProblemClass in a namespace A, in which case you must refer to ProblemClass as A::ProblemClass if you are referring
    to it from outside the namespace A.</li>
    <li>You may be using templates and not expecting two-phase lookup to work the way it does.</li>
    <li>You could have misspelled the file name in your include. The compiler would not report an error on that if you also have an old
    version of that file under the misspelled name.</li>
    <li>You could have made ProblemClass a macro that only gets defined after you include problemclass.h, in which case what you see as
    ProblemClass gets replaced by something else by the macro
    preprocessor.</li>
    <li>You could have defined ProblemClass in a header file other than problemclass.h and then problemclass.h actually defines something
    else.</li>
    </ul>
  </blockquote>
  
  <p>The above was taken from another similar question, I found the points useful but none actually solved my problem, stated hereunder:</p>
  
  <p>I'm creating a natural language processor for a robot, giving the software various objects to represent real world items in its environment (Blocks world for now), one of the objects defined in Block:</p>
  
  <pre><code>    /*
   * Block.h
   *
   *  Created on: 11 Mar 2015
   *      Author: Edward
   */
  
  #ifndef BLOCK_HPP_
  #define BLOCK_HPP_
  
  #include "typedefinitions.h"
  #include "dynamixel.h"
  #include "BasicRobotFunctions.hpp"
  
  class Block {
  public:
      bool grounded;
      //TODO position is a deprecated variable, replace with distance from
      //pos position;
      int number;
      int distance;
      int object_brightness;
      Block(BasicRobotFunctions basic);
      virtual ~Block();
      void setBrightness(int brightness);
      void setGrounded(bool ground);
      //void setPosition(int x, int y);
      void setDistance(int number);
      void setNumber(int number);
      //pos getPosition();
      int getNumber();
      int getDistance();
      bool getGrounded();
      int getBrightness();
      int lookAround(BasicRobotFunctions basic);
  };
  
  #endif /* BLOCK_H_ */
  </code></pre>
  
  <p>with source file:</p>
  
  <pre><code>/*
   * Block.cpp
   *
   *  Created on: 11 Mar 2015
   *      Author: Edward
   */
  
  #include "Block.hpp"
  
  #define DEFAULT_PORTNUM 3   // COM3
  #define DEFAULT_BAUDNUM 1  //  1Mbps
  
  Block::Block(BasicRobotFunctions basic) {
      grounded = false;
      number = Block::lookAround(basic);
  }
  
  Block::~Block() {}
  
  void Block::setGrounded(bool ground){
      grounded = ground;
  }
  /*
  void Block::setPosition(int x, int y){
      position.x = x;
      position.y = y;
  }*/
  
  void Block::setDistance(int dist){
      distance = dist;
  }
  
  void Block::setNumber(int num){
      number = num;
  }
  
  bool Block::getGrounded(){
      return grounded;
  }
  /*
  pos Block::getPosition(){
      return position;
  }*/
  
  int Block::getNumber(){
      return number;
  }
  
  int Block::getDistance(){
      return distance;
  }
  
  int Block::getBrightness(){
      return object_brightness;
  }
  
  //TODO Arrange function to incorporate Turn() in BasicRobotFunctions
  int Block::lookAround(BasicRobotFunctions basic){
      int num = 0;
      dxl_initialize(DEFAULT_PORTNUM,DEFAULT_BAUDNUM);
      for(int i = 0;i&lt;360;i++){
          dxl_write_word(11,32,-255);
          dxl_write_word(11,30,200);
          basic.Step(1);
          dxl_write_word(11,32,255);
          dxl_write_word(11,30,100);
          if(dxl_read_byte(100,32) &gt;= dxl_read_byte(100,52)){
              num++;
          }
      }
      dxl_terminate();
      return num;
  }
  
  void Block::setBrightness(int bright){
      object_brightness = bright;
  }
  </code></pre>
  
  <p>I am however receiving the following compilation error from the constructor and from the turnAround(BasicRobotFunctions) method:</p>
  
  <pre><code>In file included from Robot.hpp:11,
                   from BasicRobotFunctions.hpp:12,
                   from main.cpp:8:
  Block.hpp:23: error: expected `)' before 'basic'
  Block.hpp:35: error: 'BasicRobotFunctions' has not been declared
  make.exe: *** [main.o] Error 1
  </code></pre>
  
  <p>Having checked my other classes utilizing objects as variables I get the same error. 
  In response to the points in the quote:
   - BasicRobotFunctions.hpp is included
   - the class name is spelt the same in all different instances mentioning it
   - I didn't copy paste any inclusion guard
   - I didn't use any namespaces in the project
   - Nor am I using any templates
   - the file name isn't misspelled in my include
   - I haven't defined any macros in the program
   - I made sure every class was defined in its own header file</p>
  
  <p>Is there any other issue my system could possibly have, any mistake I'm making or simply anything I'm doing which is bad programming practice here?</p>