Pages: [1]   Go Down
Author Topic: ... was not declared in this scope  (Read 747 times)
0 Members and 1 Guest are viewing this topic.
D-49565 Bramsche
Offline Offline
Sr. Member
****
Karma: 6
Posts: 477
Geht nich ? Gipp's nich !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das hier
Code:
typedef struct
{
  int Dir;
  int Steps;
  int Speed;
} CMD_record;

CMD_record* CMD_Seqence;
int NumSeq = 0;

void setup()
{
}

void loop()
{
  SetNumSeq();
}

void SetNumSeq()
{
  if (NumSeq == 0)
  {
    NumSeq = 10;  
    CMD_Sequence  = (CMD_Record*) calloc (NumSeq, (sizeof (CMD_Record)));
  }
}
gibt folgende Fehler:
Quote
sketch_jul06a.ino: In function 'void SetNumSeq()':
sketch_jul06a:27: error: 'CMD_Sequence' was not declared in this scope
sketch_jul06a:27: error: 'CMD_Record' was not declared in this scope
sketch_jul06a:27: error: expected primary-expression before ')' token
sketch_jul06a:27: error: expected `;' before 'calloc'
Warum ?
Logged

To young to die - never to old for rock'n roll

Germany
Offline Offline
Newbie
*
Karma: 4
Posts: 33
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

weil du dich vertippt hast?


CMD_Seqence != CMD_Sequence
Logged

D-49565 Bramsche
Offline Offline
Sr. Member
****
Karma: 6
Posts: 477
Geht nich ? Gipp's nich !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

.... ach du dickes Ei ! 2x sogar: CMD_record != CMD_Record
Das finde ich sehr nervig, dieses Unterscheiden zwischen klein & groß ...
Logged

To young to die - never to old for rock'n roll

Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 249
Posts: 21183
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Das finde ich sehr nervig, dieses Unterscheiden zwischen klein & groß ...
Ist aber leider so.
Grüße Uwe
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 56
Posts: 2978
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hat auch sein Gutes smiley-wink

Man kann sich z.B. angewöhnen, Klassen mit Großbuchstaben anfangen zu lassen, dann ist das "fast" gleiche Wort, mit kleinem Anfangsbuchstaben, noch als Variablennamen verfügbar.

Code:
class Sample {};
Sample sample; 


Aber dass es nervt, wenn man solche Fehler macht, ist schon richtig. Du bist nicht allein...
Mit der Zeit gewöhnt man sich an, die Fehlermeldungen genau anzusehen: "Was könnte den idiotischen Compiler gestört haben, dass er so meckert ? "

 
Logged

D-49565 Bramsche
Offline Offline
Sr. Member
****
Karma: 6
Posts: 477
Geht nich ? Gipp's nich !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Schon wieder ... diesmal hab ich aber nach Tippfehlern geguckt !

Mein Projekt-Sketch erkennt (plötzlich) die in der Lib instantiierte Klasse nicht mehr.
Das sieht anfangs der MegaStepper.cpp so aus:
Code:
#include "MegaStepper.h"

MegaStepper MegaStep = MegaStepper();      // preinstatiate
.....
ISR(TIMER1_OVF_vect)    
{
  MegaStep.StepMotor(0);
}
.....

Bis hier wird noch nicht rumgemault, aber hier im Sketch:
Code:
#include <MegaStepper.h>
//MegaStepper MegaStep = MegaStepper();      
.....
int result = 0;

void setup()
{
  .....
  result = MegaStep.getFreeRAM();
}


Hier kennt Arduino "MegaStep" plötzlich nicht mehr - in der Lib schon !
Nehme ich allerdings die Slashes vor der (re-)instatiierung weg, gibts Mecker ala "Kenn ich schon !"
Nehme ich die Vorinstantiierung in der Lib weg und klammer die Aurufe in den ISR-Routinen aus, geht das.

Der Witz dabei ist: Das hat schon mal funktioniert ! Irgendwie ....
Und:
Dieses "TimerOne" Beispiel mit ISRBlink ist genauso aufgebaut und funktioniert tadellos:
Code:
Aus der TimerOne.cpp:

#include "TimerOne.h"
TimerOne Timer1;              // preinstatiate

ISR(TIMER1_OVF_vect)          // interrupt service routine that wraps a user defined function supplied by attachInterrupt
{
  Timer1.isrCallback();
}
....

Aus dem ISRBlink-Sketch:

#include <TimerOne.h>
 
void setup()
{
  .....// Initialize the digital pin as an output.
  Timer1.initialize(100000); // set a timer of length 100000 microseconds (or 0.1 sec - or 10Hz => the led will blink 5 times, 5 cycles of on-and-off, per second)
  Timer1.attachInterrupt( timerIsr ); // attach the service routine here
}

Ich bekomm das momentan absolut nicht auf den Schirm, wieso. Help please ....
« Last Edit: July 16, 2013, 06:57:21 am by TERWI » Logged

To young to die - never to old for rock'n roll

Germany
Offline Offline
Faraday Member
**
Karma: 56
Posts: 2978
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Wenn ich dich richtig verstehe:

Mit auskommentiertem 
// MegaStepper MegaStep ...
kennt der Compiler MegaStep nicht ( woher auch ? )
Ohne die Kommentar-Zeichen
MegaStepper MegaStep;
meckert der Linker, dass die Variable MegaStep doppelt definiert ist...

Dann musst du dem Compiler eben sagen, dass es irgendwann (beim Linken) irgendwo (in einer anderen Datei) eine Variable MegaStep vom Typ MegaStepper geben wird:

Code:
extern MegaStepper MegaStep;

Kann man auch in die include - Datei schreiben, damit jeder der
#include "MegaStepper.h"
einfügt, dieses globale Objekt kennt.

( Wenn du mehr lernen willst, " c++ static class members "   ist etwas anderes,  scheint aber auch interessant für dich zu sein )
Logged

Germany, Osnabrück
Offline Offline
God Member
*****
Karma: 29
Posts: 644
E-Technik Student - Master
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Oder man kombiniert das ganze noch mit dem "__attribute__((weak))" Attribut. Falls es dann jemand später aus Dummheit überschreiben sollte, würde keine Fehlermeldung auftauchen. Weak Attribut

Ich habe bei meinen Libs festgestellt, das es immer mal wieder sinnvoll sein kann sowas zu verwenden.
Logged

D-49565 Bramsche
Offline Offline
Sr. Member
****
Karma: 6
Posts: 477
Geht nich ? Gipp's nich !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Vorweg gesagt: mit extern ... im Sketch funktioniert das (wieder).
Mit auskommentiertem 
// MegaStepper MegaStep ...
kennt der Compiler MegaStep nicht ( woher auch ? )
Ohne die Kommentar-Zeichen
MegaStepper MegaStep;
meckert der Linker, dass die Variable MegaStep doppelt definiert ist...

Dann musst du dem Compiler eben sagen, dass es irgendwann (beim Linken) irgendwo (in einer anderen Datei) eine Variable MegaStep vom Typ MegaStepper geben wird:
Ja, eben drum !
Ich hatte bisher niemals / bzw. über haupt eine (2.) Instantiierung von MegaStep im Sketch.
Stand wie bisher immer "oben" öffentlich in der .cpp.
Eben genauso so wie es in der Timer-Lib auch gemacht wird - und da geht es auch "ohne" die extern Deklaration.
Das ist ja eben, was stutzig macht.
Logged

To young to die - never to old for rock'n roll

Germany
Offline Offline
Faraday Member
**
Karma: 56
Posts: 2978
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

http://www.pjrc.com/teensy/td_libs_TimerOne.html

In der TimerOne.cpp ist

TimerOne Timer1; // Definition

und am Ende von TimerOne.h steht

extern TimerOne Timer1;

Und wo ist dein Problem ?
Logged

D-49565 Bramsche
Offline Offline
Sr. Member
****
Karma: 6
Posts: 477
Geht nich ? Gipp's nich !
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ähem, hüstel .... Ausrede: Kein (sterblicher) Delphianer kommt normalerweise auf so was !  smiley-cool
Hatte ich das schon mal drin ? Alzheimer seit ein paar Tagen ? Seit Ewigkeiten die Brille nicht mehr geputzt ?
Wie dem auch sei: Ich hab mir nun ne fette Bemerkung in den Source geschrieben.
... deine Erleuchtung werde größer, michael_x !  smiley-mr-green

Nachtrag: Diese extern-Dekl. muss wohl anscheinend genau an dieser Stelle stehen !?
« Last Edit: July 16, 2013, 11:21:16 am by TERWI » Logged

To young to die - never to old for rock'n roll

Germany
Offline Offline
Faraday Member
**
Karma: 56
Posts: 2978
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Diese extern-Dekl. muss wohl anscheinend genau an dieser Stelle stehen !?

Dort am Ende ist sie nur, damit du sie nicht so leicht siehst smiley-wink

Muss irgendwo (Nachtrag: nach der Definition der class TimerOne) sein, und bevor die Variable verwendet wird. Ob in der include - Datei oder danach in deiner .ino, ist eigentlich egal.
« Last Edit: July 17, 2013, 02:15:07 am by michael_x » Logged

Pages: [1]   Go Up
Jump to: