Pages: [1]   Go Down
Author Topic: Wieso: ...has no member named 'setChannels'?  (Read 648 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 36
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich steh mal wieder voll auf der Leitung und blicks gar nicht!
Der Code des Sketch-Files sieht so aus:

Code:
#include <Tlc5940.h>
#include <tlcRGBLED.h>

RGBLED LED[] = {
  RGBLED(0,1,2),
  RGBLED(3,4,5),
  RGBLED(6,7,8),
  RGBLED(9,10,11),
  RGBLED(12,13,14)
};

  uint8_t i;

void setup()
{
  uint8_t c1;
  uint8_t c2;
  uint8_t c3;

  for(i=0; i<=4; i++){
    //Initialisiere LED
    c1=i*3;
    c2=i*3+1;
    c3=i*3+2;
    LED[i].setChannels(c1,c2,c3); /* Das ist die Problem-Zeile! */
  }
  Tlc.init();
}

void loop()
{
  for(i=0; i<=4; i++){
    LED[i].setTLC(4095,0,0);
  }
  Tlc.update();
}

Lass ich die Problemzeile weg, dann funktioniert alles (die for-Schleife kann ich dann natürlich komplett weglassen!)

In tlcRGBLED.h ist die Klasse definiert:

Code:
class RGBLED {
  uint8_t TLC_Channel_Red, TLC_Channel_Green, TLC_Channel_Blue;
  uint16_t Red, Green, Blue;
  public:      
      RGBLED(uint8_t,uint8_t,uint8_t);      
      void setChannels(uint8_t,uint8_t,uint8_t);
        void setTLC(uint16_t,uint16_t,uint16_t);
};

und in tlcRGBLED.cpp ist u.a. die Klassen-Methode definiert:

Code:
void RGBLED::setChannels(uint8_t cr, uint8_t cg, uint8_t cb){
  TLC_Channel_Red = cr;
  TLC_Channel_Green = cg;  
  TLC_Channel_Blue = cb;
}

Der Compiler behauptet nun:
RGBLED_Test.cpp: In function 'void setup()':
RGBLED_Test:24: error: 'class RGBLED' has no member named 'setChannels'

Sorry, aber das versteh ich nicht, ich habe die Funktion 'setChannels' in der Klasse RGBLED deklariert. >smiley-sad
Kann mich jemand aufklären!
Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 77
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hmmm... ich kenne C++ ned wirklich, aber muss man in der Header-Datei im Prototypen keine Variablennamen angeben?
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 36
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
@Radar: '...im Prototypen keine Variablennamen angeben? '
Ich weis nicht genau, was Du meinst. In der Klassendeklaration sind die Klassen-Variablen als privat deklariert:
Code:
class RGBLED {
  uint8_t TLC_Channel_Red, TLC_Channel_Green, TLC_Channel_Blue;
  uint16_t Red, Green, Blue;
Außerdem habe ich die Methode RGBLED::setTLC in gleicher Weise implementiert wie RGBLED::setChannels und setTLC funktioniert einwandfrei.

Hier noch die Implementierung der setTLC-Methode:
Code:
void RGBLED::setTLC(uint16_t r, uint16_t g, uint16_t b){
      Red = r;
      Green = g;
      Blue = b;

  Tlc.set(TLC_Channel_Red, Red );
  Tlc.set(TLC_Channel_Green, Green );
  Tlc.set(TLC_Channel_Blue, Blue );
}
« Last Edit: December 09, 2010, 06:05:32 am by tomybyte » Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 36
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo! Gibts hier keinen im deutschen Forum, der sich mit Arduino C soweit auskennt, um sagen zu können, welchen Fehler ich hier mache, denn etwas muss ja falsch sein, sonst würde es ja funktionieren!

Danke und Gruß Tom
Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 77
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ich meinte den Funktions-Prototypen. Die deklarierung der Funktion vor der eigentlichen implementierung.
----
void setChannels(uint8_t, uint8_t, uint8_t);

zu

void setChannels(uint8_t cr ,uint8_t cg ,uint8_t cb);
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 36
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
@Radar: void setChannels(uint8_t cr ,uint8_t cg ,uint8_t cb);
Das verändert nichts. Die Funktion setTLC ist ja auch ohne die Variablen-Deklaration in der Klasse implementiert und funktioniert.

Jetzt habe ich entdeckt, dass außer der Konstruktor-Funktion nur setTLC als Klassen-Methode funktioniert, wenn ich andere Methoden implementiere, egal welcher Typ, dann kommt immer die Meldung, wenn ich diese im Setup oder auch Loop aufrufen will, der Compiler error "...has no member named '[Methodenname]'".
Das seltsame ist, ich kann dabei keinerlei Systematik erkennen. setTLC(...) wird akzeptiert egal, wo deklariert, alle anderen Methoden nicht.
Ich bin mit meinem Programmierer-Latein komplett am Ende.

Benötige dringend Hilfe!
Logged

Pages: [1]   Go Up
Jump to: