title: Arduino error: does not name a type?
body: <p>I have written a library, but have problem with error does not name a type. I've tryed everything, searched for couple of hours and no luck. Library is placed in the "libraries" folder of the arduino sketch folder. Please help!!! I am using OSX, but the same problem occurs on Windows also.</p>
  
  <p>This is header file of the library:</p>
  
  <pre><code>#ifndef OpticalSensor_h
  #define OpticalSensor_h
  
  #include &lt;Arduino.h&gt;
  #include &lt;SD.h&gt;
  #include &lt;Wire.h&gt;
  #include &lt;Adafruit_MCP23017.h&gt;
  #include &lt;Adafruit_RGBLCDShield.h&gt;
  #include &lt;String.h&gt;
  
  class OpticalSensor
  {
      public:
          OpticalSensor(int analogPort);
          void LCDInit(int columns, int rows);
          void SerialInit(int bitRate);
          void SDInit();
          double&amp; ReadFromAnalogPort();
          void SDCreateFile(String fileName);
          void SDDeleteFile(String fileName);
          void SDWriteToFile(String fileName);
          void SDStreamToFile(String Text);
          void SDOpenFileToStream(String fileName);
      private:
          int _analogPort;
          bool _displayFlag;
          Adafruit_RGBLCDShield _lcd;
          File _MainRecFile;
          double _voltage;
          void _LCDClearAll();
          void _LCDWriteInTwoRows(String row1, String row2);
          void _DelayAndClearLCD(bool returnStatus);
  };
  
  #endif
  </code></pre>
  
  <p>This is .cpp file of the library:</p>
  
  <pre><code>#include &lt;OpticalSensor.h&gt;
  
  Adafruit_RGBLCDShield _lcd;
  File _MainRecFile;
  double _voltage;
  
  OpticalSensor::OpticalSensor(int analogPort)
  {
      _analogPort = analogPort;
  }
  
  void OpticalSensor::LCDInit(int columns, int rows)
  {
  
      _lcd = Adafruit_RGBLCDShield();
      _lcd.begin(columns,rows);
  }
  
  void OpticalSensor::SerialInit(int bitRate)
  {
      Serial.begin(bitRate);
      _bitRate = bitRate;
      while(!Serial) {
          //wait until serial is not open
      }
  }
  
  void OpticalSensor::SDInit()
  {
      // On the Ethernet Shield, CS is pin 4. It's set as an output by default.
      // Note that even if it's not used as the CS pin, the hardware SS pin
      // (10 on most Arduino boards, 53 on the Mega) must be left as an output
      // or the SD library functions will not work.
      pinMode(10, OUTPUT);
  
      //check if SD can be found and initialized. Print also message to
      //Serial if initialized and to _lcd if initialized.
     if(!SD.begin(4)) {
       if(Serial){
           Serial.println("Initialization failed!");
       }
       if(_lcd){
           _lcd.print("Init failed!");
       }
       _DelayAndClearLCD(true);
     }
     else {
         if(Serial) {
             Serial.println("Initialization done!");
         }
         if(_lcd) {
             lcd.print("Init done!");
         }
         _DelayAndClearLCD(false);
     }
  }
  
  void OpticalSensor::SDCreateFile(String fileName)
  {
      //check if file allready exists, if not it creates one
      //and writes apropriate response to
      //lcd and Serial if they are initialized.
      if(SD.exists(fileName)) {
          if(Serial) {
              Serial.println(fileName + " already exists!");
          }
          if(_lcd) {
              _LCDWriteInTwoLines(fileName,"already exists!");
          }
          _DelayAndClearLCD(false);
      }
      else
      {
          if(Serial) {
              Serial.println(fileName + "Creating file " + fileName + "...");
          }
          if(_lcd) {
              _LCDWriteInTwoLines("Creating file", fileName);
          }
          _MainRecFile = SD.open(fileName + ".txt", FILE_WRITE);
          _MainRecFile.close();
          _DelayAndClearLCD(false);
  
  
          //check if file was created successffully and print apropriate response
          //to lcd and Serial if they are initialized
          if(SD.exists(fileName + ".txt")) {
              if(Serial) {
                  Serial.println(fileName + ".txt" + " created successffully!");
              }
              if(_lcd) {
                  _LCDWriteInTwoLines(fileName + ".txt", "created!");
              }
              _DelayAndClearLCD(false);
          }
          else {
              if(Serial) {
                  Serial.println("error: failed to create file!");
              }
              if(_lcd) {
                  _LCDWriteInTwoLines("error: failed to","create file!");
              }
              _DelayAndClearLCD(false);
          }
      }
  }
  
  //delete file from SD card
  void OpticalSensor::SDDeleteFile(String fileName)
  {
  
  }
  
  //open file, write data to it, and close file after.
  void OpticalSensor::SDWriteToFile(String fileName, String Text)
  {
      _MainRecFile = SD.open(fileName + ".txt", FILE_WRITE);
      _MainRecFile.println(Text);
      _MainRecFile.close();
  }
  
  //Open file to stream data to it.
  void OpticalSensor::SDOpenFileToStream(String fileName)
  {
      _MainRecFile = SD.open(fileName + ".txt", FILE_WRITE);
  }
  
  //Write data to file while file is open.
  //Notice that you can stream data only to one file at a time!!!
  //For instance, if you have two sensors that you want to
  //write data to two different files, you have to use SDWriteToFile
  //function!!!
  void OpticalSensor::SDStreamToFile(String Text)
  {
      if(_MainRecFile) {
          _MainRecFile.println(Text);
      }
  }
  
  //close file that you streamed data too.
  void OpticalSensor::SDCloseStreaming(String fileName)
  {
      _MainRecFile.close();
  }
  
  //clear entire LCD
  void OpticalSensor::_LCDClearAll()
  {
      _lcd.clear();
      _lcd.setCursor(0,0);
  }
  
  void OpticalSensor::_LCDWriteInTwoRows(String row1, String row2)
  {
      //write first String in row1
      _lcd.print(row1);
      //set cursor to the beginning of row 2
      _lcd.setCursor(0,1);
      //write second String to row 2
      _lcd.print(row2);
  }
  
  void OpticalSensor::_DelayAndClearLCD(bool returnStatus)
  {
      //if Serial or _lcd are initialized, delay for 2 seconds
      //and clear LCD
      if(Serial || _lcd) {
          delay(2000);
          if(_lcd)
              _LCDClearAll();
      }
      //terminate
      if(bool == true) {
          return;
      }
  }
  
  double&amp; ReadFromAnalogPort()
  {
      _voltage = analogRead(_analogPort);
      return _voltage;
  }
  </code></pre>
  
  <p>And this is the .ino file where library is included:</p>
  
  <pre><code>#include &lt;OpticalSensor.h&gt;
  
  OpticalSensor sensor(0);
  
  void setup() {
    sensor.LCDInit(16,2);
    sensor.SerialInit(9600);
    sensor.SDInit();
    sensor.SDCreateFile("test1");
    sensor.SDOpenFileToStream("test1");
  }
  
  void loop() {
  
  }
  </code></pre>
  
  <p>this is the error:</p>
  
  <blockquote>
    <p>In file included from Test_OpticalSensorLib.ino:1:
    /Users/gaspersladic/Documents/Arduino/libraries/OpticalSensor/OpticalSensor.h:34:
    error: 'Adafruit_RGBLCDShield' does not name a type
    /Users/gaspersladic/Documents/Arduino/libraries/OpticalSensor/OpticalSensor.h:35:
    error: 'File' does not name a type</p>
  </blockquote>