- 3D-Druck Einstieg und Tipps         
Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 14

Thema: Error: expected identifier before "." token

  1. #1

    Frage Error: expected identifier before "." token

    Anzeige

    E-Bike
    Unsere selbstgeschriebene Lib (verwendet auch fertige Libs aus dem Net), produziert beim compilen immer den Fehler:
    Code:
    In file included from katze.cpp:1:
    katze.h:15: error: expected identifier before '.' token
    katze.h:15: error: expected unqualified-id before '.' token
    katze.cpp:4: error: expected unqualified-id before '.' token
    katze.cpp:26: error: expected unqualified-id before '.' token
    katze.cpp:40: error: expected unqualified-id before '.' token
    Hier der Code:
    Code:
    #ifndef katze_h
    #define katze_h
    
    #include "Arduino.h"
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    #include <Motor.h>
    #include <SonarSRF08.h>
    
    #define CompI2CADDR 0x30
    #define CompTakeMeasure 0x01
    #define CompSet 0x02
    #define CompReset 0x04
    
    class katze
     {
      public:
       katze(int ml1, int ml2, int mr1, int mr2, int md1, int md2);
       void us_tm();
       int us1_r();
       int us2_r();
       double comp_r();
       void comp_tm();
       void comp_reset();
       void comp_calib();
       void ml_speed(int v, int d);
       void mr_speed(int v, int d);
       void md_speed(int v, int d);
       
      private:
       int mlp1, mlp2, mrp1, mrp2, mdp1, mdp2;  
       int x_min = 3000, x_max = -3000, y_min = 3000, y_max = -3000;
       int i;
       byte MsbX,LsbX,MsbY,LsbY;
       int x,y;
     };
     
     #endif
    HAt jemand von euch eine Idee, woran das liegen könnte.
    vg Malte
    Angehängte Dateien Angehängte Dateien
    • Dateityp: h katze.h (790 Bytes, 3x aufgerufen)

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    66
    Beiträge
    2.435
    Hallo malte,

    Wie wärs mit einem Datentyp vor
    katze(.....

    ?

    MfG Peter(TOO)

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Zitat Zitat von Peter(TOO) Beitrag anzeigen
    Hallo malte,

    Wie wärs mit einem Datentyp vor
    katze(.....

    ?

    MfG Peter(TOO)
    Nein, es wird eine Klasse definiert, das ist schon richtig so.

    In dem angehängten File hast du #ifndef katze.h stehen.
    Es muss aber ein Makro sein. Das Makro endet aber für den Kompiler beim Punkt.

    Am besten in
    #ifndef KATZE__H
    #define KATZE__H
    umschreiben.
    Großbuchstaben und 2*__ sind gebräuchlich in dieser Situation.
    Das oben in dem SouceCode stehende katze_h sollte allerdings auch funktionieren.

    Und du solltest statt
    int x_min = 3000, x_max = -3000, y_min = 3000, y_max = -3000;
    static const int x_min = 3000, x_max = -3000, y_min = 3000, y_max = -3000;
    schreiben, weil eine direkte Werteinitialisierung in Klassen normalerweise verboten ist.
    Ausnahme sind statitische ganzzahlige Konstanten.
    Geändert von Sisor (15.01.2014 um 15:38 Uhr)

  4. #4
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.08.2008
    Ort
    DE
    Beiträge
    523
    Das sollte kompilieren:
    Code:
    #ifndef KATZE_H_
    #define KATZE_H_
    
    
    #include <Arduino.h>
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    #include <Motor.h>
    #include <SonarSRF08.h>
    
    
    #define CompI2CADDR 0x30
    #define CompTakeMeasure 0x01
    #define CompSet 0x02
    #define CompReset 0x04
    
    
    
    
    class katze {
    public:
       katze(int ml1, int ml2, int mr1, int mr2, int md1, int md2);
       void us_tm();
       int us1_r();
       int us2_r();
       double comp_r();
       void comp_tm();
       void comp_reset();
       void comp_calib();
       void ml_speed(int v, int d);
       void mr_speed(int v, int d);
       void md_speed(int v, int d);
       
    private:
       int mlp1, mlp2, mrp1, mrp2, mdp1, mdp2;  
       int x_min, x_max, y_min, y_max;
       int i;
       byte MsbX,LsbX,MsbY,LsbY;
       int x,y;
       
     };
     
     
     #endif /*KATZE_H_*/
    mfg

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    27.08.2013
    Ort
    Region Basel
    Alter
    66
    Beiträge
    2.435
    Hallo,
    Zitat Zitat von Sisor Beitrag anzeigen
    Nein, es wird eine Klasse definiert, das ist schon richtig so.
    Nicht der Klassenname, die andere Katze
    Code:
    class katze
     {
      public:
       katze(int ml1, int ml2, int mr1, int mr2, int md1, int md2);
       void us_tm();
       ....
    Unter public ist eine Memberfunktion katze und die hat keinen Typ angegeben!

    Da aber die Implementierung fehlt, habe ich keine Ahnung was diese Funktion für einen Rückgabewert liefert.

    MfG Peter(TOO)

  6. #6
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Stichwort: Konstruktor!

    Das bedeutet, dass man ein katze-Objekt nur erstellen kann, wenn man ml1, ml2, mr1, mr2, md1, md2 angibt.
    Da diese wahrscheinlich die Pinbelegung der Motoren darstellen, macht das auch Sinn.
    Im Hauptprogramm wird das dann z.B. so genutzt:

    katze miau(2,3,4,5,6,7);
    Geändert von Sisor (15.01.2014 um 17:14 Uhr)

  7. #7
    Genau: katze(...); soll der Konstruktor der Klasse katze sein. Der Aufbau wird auch bei http://arduino.cc/en/Hacking/LibraryTutorial
    so gehandhabt.

    Auch in der Version von Wsk8 treten noch Fehler auf:
    Code:
    In file included from katze.cpp:1:
    katze.h:15: error: expected identifier before '.' token
    katze.h:15: error: expected unqualified-id before '.' token
    katze.cpp:4: error: expected unqualified-id before '.' token
    katze.cpp:26: error: expected unqualified-id before '.' token
    katze.cpp:40: error: expected unqualified-id before '.' token
    Vilen Dank für die Hilfe,
    Malte

  8. #8
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    08.08.2008
    Ort
    DE
    Beiträge
    523
    Katze.h sollte zu 99.9% stimmen.

    Da du am Anfang noch so viele Header einbindest:
    Code:
    #include <Arduino.h>#include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    #include <Motor.h>
    #include <SonarSRF08.h>
    gehe ich davon aus, dass der Fehler hier irgendwo liegen muss.

    Würde ich entfernen und wenn dann in der cpp einfügen. Sieht nicht so aus als ob man die im Header benötigt.

    mfg

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    13.01.2014
    Beiträge
    454
    Blog-Einträge
    3
    Schau mal nach, ob katze.cpp noch ne alte falsche Version einbinded (included).
    Denn eigentlich sollte das so funktionieren.

  10. #10
    Der alte Fehler hat sich so beheben lasse. Vielen Dank!

    Allerdings binded er die übrigen Libs nicht ein, bzw. erstellt die anderen Objekte nicht.
    Auch die unter private eingeführten Vars gehen nicht:
    Code:
    
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:14: error: 'LiquidCrystal_I2C' does not name a type
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:15: error: 'Motor' does not name a type
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:16: error: 'Motor' does not name a type
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:17: error: 'Motor' does not name a type
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp: In constructor 'katze::katze(int, int, int, int, int, int)':
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:29: error: 'Wire' was not declared in this scope
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:31: error: 'display' was not declared in this scope
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp: In function 'void comp_reset()':
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:38: error: 'Wire' was not declared in this scope
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:46: error: 'display' was not declared in this scope
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp: In function 'void comp_calib()':
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:52: error: 'display' was not declared in this scope
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:54: error: 'i' was not declared in this scope
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:56: error: 'Wire' was not declared in this scope
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:66: error: 'MsbX' was not declared in this scope
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:67: error: 'LsbX' was not declared in this scope
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:68: error: 'MsbY' was not declared in this scope
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:69: error: 'LsbY' was not declared in this scope
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:71: error: 'x' was not declared in this scope
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:72: error: 'y' was not declared in this scope
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:73: error: 'x_min' was not declared in this scope
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:77: error: 'x_max' was not declared in this scope
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:81: error: 'y_min' was not declared in this scope
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:85: error: 'y_max' was not declared in this scope
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:89: error: 'ml' was not declared in this scope
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:90: error: 'mr' was not declared in this scope
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp: In function 'void comp_tm()':
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:103: error: 'Wire' was not declared in this scope
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp: In function 'double comp_r()':
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:112: error: 'Wire' was not declared in this scope
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:117: error: 'MsbX' was not declared in this scope
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:118: error: 'LsbX' was not declared in this scope
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:119: error: 'MsbY' was not declared in this scope
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:120: error: 'LsbY' was not declared in this scope
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:122: error: 'x' was not declared in this scope
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:123: error: 'y' was not declared in this scope
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:124: error: 'x_min' was not declared in this scope
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:124: error: 'x_max' was not declared in this scope
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:125: error: 'y_min' was not declared in this scope
    C:\Dokumente und Einstellungen\Malte\Eigene Dateien\Arduino\libraries\katze2\katze2.cpp:125: error: 'y_max' was not declared in this scope
    Code:
    #ifndef katze2_h
    #define katze2_h
    
    
    class katze 
     {
      public:
       katze(int ml1, int ml2, int mr1, int mr2, int md1, int md2);
       void us_tm();
       int us1_r();
       int us2_r();
       double comp_r();
       void comp_tm();
       void comp_reset();
       void comp_calib();
       void ml_speed(int v, int d);
       void mr_speed(int v, int d);
       void md_speed(int v, int d);
       
      private:
       int mlp1, mlp2, mrp1, mrp2, mdp1, mdp2;  
       int x_min, x_max, y_min, y_max;
       int i;
       int MsbX,LsbX,MsbY,LsbY;
       int x,y;
     };
     
     #endif
    Code:
    #include <katze2.h>
    
    #include "Arduino.h"
    #include <Wire.h>
    #include <LiquidCrystal_I2C.h>
    #include <Motor.h>
    #include <SonarSRF08.h>
    
    #define CompI2CADDR 0x30
    #define CompTakeMeasure 0x01
    #define CompSet 0x02
    #define CompReset 0x04
    
    LiquidCrystal_I2C display(0x20, 16, 2);
    Motor ml(mlp1,mlp2);
    Motor mr(mrp1,mrp2);
    Motor md(mdp1,mdp2);
    
    katze::katze(int ml1, int ml2, int mr1, int mr2, int md1, int md2)
    {
     mlp1=ml1; mlp2=ml2; mrp1=mr1; mrp2=mr2; mdp1=md1; mdp2=md2;
     pinMode(mlp1,OUTPUT); digitalWrite(mlp1,LOW);
     pinMode(mlp2,OUTPUT); digitalWrite(mlp2,LOW);
     pinMode(mrp1,OUTPUT); digitalWrite(mrp1,LOW);
     pinMode(mrp2,OUTPUT); digitalWrite(mrp2,LOW);
     pinMode(mdp1,OUTPUT); digitalWrite(mdp1,LOW);
     pinMode(mdp2,OUTPUT); digitalWrite(mdp2,LOW);
     
     Wire.begin();
      
     display.init();
     display.backlight();
     display.print("Hello, world!");
    }
    
    void comp_reset()
    {
     Wire.beginTransmission(CompI2CADDR);
     Wire.write(0x00);
     Wire.write(CompSet);
     delay(10);
     Wire.write(0x00);
     Wire.write(CompReset);
     delay(10);
     Wire.endTransmission();
     display.setCursor(0,0);
     display.print("comp reset done ");
    }
    
    void comp_calib()
    {
     display.setCursor(0,0);
     display.print("Start Calib     ");
     for(i=0;i<255;i++)
    {
      Wire.beginTransmission(CompI2CADDR); // Pollin HDMM01
      Wire.write(0x00);
      Wire.write(CompTakeMeasure);
      Wire.endTransmission();
      delay(20);
      Wire.beginTransmission(CompI2CADDR);
      Wire.write(0x01);
      Wire.requestFrom(CompI2CADDR, 4);
    
      while(Wire.available()<4);
      MsbX =Wire.read(); // obere 4 Bit X
      LsbX =Wire.read(); // untere 8 Bit X
      MsbY =Wire.read(); // obere 4 Bit Y
      LsbY =Wire.read(); // untere 8 Bit Y
      Wire.endTransmission(); // stop transmitting
      x=((MsbX&0x0f)*256)+(LsbX);
      y=((MsbY&0x0f)*256)+(LsbY);
      if(x < x_min)
       {
        x_min = x;
       }
      if(x > x_max)
       {
        x_max = x;
       }
      if(y < y_min)
       {
        y_min = y;
       }
      if(y > y_max)
       {
        y_max = y;
       } 
      ml.set_speed(1,255);
      mr.set_speed(-1,255);
      delay(100);
      ml.set_speed(0,0);
      mr.set_speed(0,0);
      
    }
    display.setCursor(0,0);
    display.print("End Calib       ");
     
    }
    
    void comp_tm()
    {
     Wire.beginTransmission(CompI2CADDR); // Pollin HDMM01
     Wire.write(0x00);
     Wire.write(CompTakeMeasure);
     Wire.endTransmission();
     delay(20);
    }
    
    double comp_r()
    {
     Wire.beginTransmission(CompI2CADDR);
     Wire.write(CompTakeMeasure);
     Wire.requestFrom(CompI2CADDR, 4);
    
    while(Wire.available()<4);
    MsbX =Wire.read(); // obere 4 Bit X
    LsbX =Wire.read(); // untere 8 Bit X
    MsbY =Wire.read(); // obere 4 Bit Y
    LsbY =Wire.read(); // untere 8 Bit Y
    Wire.endTransmission(); // stop transmitting
    x=((MsbX&0x0f)*256)+(LsbX);
    y=((MsbY&0x0f)*256)+(LsbY);
    x = map(x, x_min, x_max, -180, 180);
    y = map(y, y_min, y_max, -180, 180);
    double mygrad = atan2(x, y)*180/3.1415927410;
    if (mygrad < 0) mygrad = mygrad +360;
    
    return(mygrad);
    }

Seite 1 von 2 12 LetzteLetzte

Ähnliche Themen

  1. Error: expected class-name before '{' token
    Von BEADG im Forum Arduino -Plattform
    Antworten: 6
    Letzter Beitrag: 22.01.2014, 12:25
  2. expected expression befor '|=' token??
    Von DarkSoldier im Forum C - Programmierung (GCC u.a.)
    Antworten: 2
    Letzter Beitrag: 24.12.2012, 10:55
  3. Antworten: 25
    Letzter Beitrag: 15.12.2010, 09:09
  4. AVR Studio "ISP Mode Error" beim Flashen
    Von Edi im Forum C - Programmierung (GCC u.a.)
    Antworten: 4
    Letzter Beitrag: 18.10.2006, 22:53
  5. "ISP Mode Error" beim programmieren mit dem STK500
    Von Fakin82 im Forum AVR Hardwarethemen
    Antworten: 1
    Letzter Beitrag: 16.09.2006, 13:42

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Labornetzteil AliExpress