Go Down

Topic: Fehlersuche (Read 3401 times) previous topic - next topic

gregorss

Hallo zusammen!

Ich schreibe gerade einen Sketch neu und habe eine Fehlermeldung bekommen, die ich nicht beseitigen kann. Wahrscheinlich bin ich immer noch ein Anfänger. Was soll's, meine Seiten im Netz sind scheinbar nützlich.

Die Fehlermeldung lautet

error: expected primary-expression before '[' token

Und der entsprechende Codeteil sieht so aus:

Code: [Select]
void show()
{
  for(byte i=0; i<=minBrightness; i++)
  {
    for(byte y=0; y<7; y++) // Achtung!
    {
      for(byte x=0; x<7; x++) // Achtung!
      {
        if ( pixel[x][y].getBrightness() > i) // <-------------------------------
        { digitalWrite(colPins[x], HIGH); }
        else
        { digitalWrite(colPins[x], LOW); }
      }
      digitalWrite(rowPins[y], HIGH);
      delayMicroseconds(800);
      digitalWrite(rowPins[y], LOW);
      for(byte x=0; x<sizeof(colPins)/sizeof(colPins[0])-1; x++)
      { digitalWrite(colPins[x], LOW); }
    }
  }
}


Das ist eine Funktion, mit der ich eine 7x7-Matrix von LEDs ansteuere, um sie einmal blinken zu lassen. Da loop() ziemlich fix ist, genügt das zunächst. Die Zeile, die den Fehler erzeugt, ist gekennzeichnet.

Sorry, dass ich Euch mit dieser Fehlermeldung belästige. Ich sehe sie nun schon seit zwei Tagen und das nervt nicht wenig.

Gruß

Gregor


Nicht lange fackeln, lass' Backen wackeln! (Seeed)

volvodani

Bist du dir sicher das es nur in diesem Codeteil ist. Der Compiler ist nicht immer so "genau" mit seinen Angaben.
Gruß
DerDani
"Komm wir essen Opa!" - Satzzeichen retten Leben!

Tommy56

Man müßte auch wissen, wie pixel deklariert ist.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

combie

Quote
Wahrscheinlich bin ich immer noch ein Anfänger.
Ja.
 :smiley-twist: Scheint mir auch so. :smiley-twist:
Ein erfahrener Programmierer, wüsste, dass die Helfer testbaren Code sehen möchten.
Beim reduzieren auf ein testbares Beispiel würde (einem erfahrenem Programmierer) der Fehler selber auffallen.
*ohne Gewähr*
Säge kein Sägemehl.

michael_x

Quote
Man müßte auch wissen, wie pixel deklariert ist
Wieso "auch" ?

Das ist die einzige ( bzw. allererste ) Frage.

Quote
Beim reduzieren auf ein testbares Beispiel würde (einem erfahrenem Programmierer) der Fehler selber auffallen.
Code: [Select]
void test () {
    for(byte y=0; y<7; y++)  {
      for(byte x=0; x<7; x++)   {
          Serial.print(pixel[x][y].getBrightness());
      }
       Serial.println();
    }
}
Das wäre erstmal genug, und würde funktionieren, wenn pixel richtig definiert wäre.

gregorss

#5
Jul 10, 2018, 03:57 pm Last Edit: Jul 10, 2018, 03:59 pm by gregorss
Man müßte auch wissen, wie pixel deklariert ist.
Code: [Select]
// pixel.h

#ifndef PIXEL_H
#define PIXEL_H

#include <Arduino.h>

class pixel
{
  private:
    byte brightness; // aktuelle Helligkeit
  public:
    pixel():brightness(0) {};
    bool setBrightness(byte);
    byte getBrightness();
};

#endif

// eof


Code: [Select]
// pixel.cpp

#include "pixel.h"

bool pixel::setBrightness(byte b_)
{
  if(b_ <= 16) // Achtung! Siehe Hauptsketch!
  { brightness=b_; return(true); }
  else
  { return(false); }
}

byte pixel::getBrightness()
{
  return(brightness);
}

// eof



Danke schonmal!

Gregor
Nicht lange fackeln, lass' Backen wackeln! (Seeed)

Tommy56

Wieso "auch" ?
Das auch bezog sich auf die Aussage vor meinem Posting. Mann, bist du derzeit mal wieder pingelig.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

Tommy56

#7
Jul 10, 2018, 04:00 pm Last Edit: Jul 10, 2018, 04:01 pm by Tommy56
@Gregor: Bei Dir wird pixel als Array angesprochen, in den Codebeispielen ist es eine Klasse und von Dir gibt es wieder nur Fragmente, keinen Link zur Lib, ... .

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

gregorss

... wieder nur Fragmente, keinen Link zur Lib, ... .
Ein Link zu Arduino.h?!

Gruß

Gregor
Nicht lange fackeln, lass' Backen wackeln! (Seeed)

Tommy56

Nö, ich vermutete, dass pixel.h größer ist.

Gruß Tommy
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

gregorss

#10
Jul 10, 2018, 04:09 pm Last Edit: Jul 10, 2018, 04:23 pm by gregorss
Willst Du uns jetzt verarschen oder kannst Du Dein eigenes Geschreibsel nicht mehr lesen?
Code: [Select]
#include "pixel.h"
Nein, wenn ich hier jemanden verarschen möchte, dann nur Dich :-)

Ich teile den aktuellen Sketch in Tabs ein, in dem es .h und .cpp Tabs gibt. pixel.h steht wie pixel.cpp in #5

Gruß

Gregor

PS: Alle Dateien des Sketches im Anhang
Nicht lange fackeln, lass' Backen wackeln! (Seeed)

michael_x

Quote
class pixel
Das ist der Anfang des Problems: pixel ist eine Klasse, du verwendest es aber als Variable.

Üblicherweise bekommen Klassen einen Namen, der mit einem Großbuchstaben anfängt, und Variablennamen fangen mit einem Kleinbuchstaben an.
Also

Code: [Select]
class Pixel {};

Pixel pixel[8][8]; //  pixel sind 64 Elemente der Klasse Pixel


Das mit der Groß/Kleinschreibung ist natürlich nur ein Vorschlag, aber den Unterschied zwischen Klasse und Variable musst du schon (irgendwie) machen

gregorss

#12
Jul 10, 2018, 04:26 pm Last Edit: Jul 10, 2018, 04:29 pm by gregorss
Das ist der Anfang des Problems: pixel ist eine Klasse, du verwendest es aber als Variable.

Üblicherweise bekommen Klassen einen Namen, der mit einem Großbuchstaben anfängt, und Variablennamen fangen mit einem Kleinbuchstaben an.
Seit wann kann ich eine Variable nicht benennen wie eine Klasse? Ist das eine der Spezialitäten von Arduino (Java?)? Der Compiler sollte doch merken, wann eine Variable und wann ein Typ gemeint ist, oder nicht?

Gruß

Gregor
Nicht lange fackeln, lass' Backen wackeln! (Seeed)

Tommy56

#13
Jul 10, 2018, 04:53 pm Last Edit: Jul 10, 2018, 05:00 pm by Tommy56
Bezeichnungen müssen eindeutig sein, egal was sie bedeuten.

Gruß Tommy

Edit: Auch wenn das technisch evtl. gehen sollte, ist es nicht gut für die Übersicht.
"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)

michael_x

Quote
Seit wann kann ich eine Variable nicht benennen wie eine Klasse?
Da hast du tatsächlich recht, auch wenn ich das für großen Mist halte.


Aber, hast du eine Variable so benannt wie deine Klasse?

combies Schelte steht noch !

Go Up