Forum: PC Hard- und Software Arduino: SoftwareSerial inside eigene Klasse


von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Ich habe eine eigen Klasse zur Ansteuerung eines Bondruckers für den 
Arduino und ich hätte gerne, dass die zugehörige SoftwareSerial 
innherhalb dieser Klasse mit dem Konstruktor initialisiert wird ... 
bekomme es aber nicht hin und benötige Hilfe. Ich schreibe den Code mal 
so hin, wie er NICHT funktioniert, aber meine Absicht daraus erkennbar 
wird:
1
#include <SoftSerial.h>
2
class SCPrinter{
3
  private:
4
    SoftSerial serial;
5
6
  public:
7
  SCPrinter(int rx, int tx){
8
    serial = new SoftSerial(rx,tx);
9
  }
10
};
11
12
SCPrinter scprinter(10,11);
13
...

von g457 (Gast)


Lesenswert?

> bekomme es aber nicht hin

Kuckst Du Fehlermeldung, sagt Dir was falsch ist.

HTH

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

g457 schrieb:
>> bekomme es aber nicht hin
>
> Kuckst Du Fehlermeldung, sagt Dir was falsch ist.
>
> HTH

Ne, sorry, die ist nicht besonders verständlich ...

von N. M. (mani)


Lesenswert?

Frank E. schrieb:
> Ne, sorry, die ist nicht besonders verständlich ...

Vielleicht versteht sie jemand anderes hier im Forum...

von g457 (Gast)


Lesenswert?

> Ne, sorry, die ist nicht besonders verständlich

Doch, ist sie. Ich weiß nämlich was im obigen Auszug falsch ist. Und 
wenn Du noch mehr Fehler drin hast als das was oben angegeben ist, dann 
würden wir uns mit einer hier angegebenen Lösung einfach nur im Kreis 
drehen, weil Du immer sagen würdest "die Lösung geht nicht, also benutze 
ich sie nicht, und ich zeig aber auch die Fehlermeldung nicht her, weil 
die ist geheim und die kann niemand verstehen, und außerdem muss der 
Fehler in obigem Codefragment sein, Hinweise auf andere Stellen 
ignoriere ich daher". Also zeig bitte die Fehlermeldungen (vollständig!) 
oder interpretiere sie selbst.

Nix für ungut.

von Oliver S. (oliverso)


Lesenswert?

Frank E. schrieb:
> Ich schreibe den Code mal
> so hin, wie er NICHT funktioniert, aber meine Absicht daraus erkennbar
> wird

Allererste Grundregel bei solchen Fragen: zeige deinen echten und 
vollständigen Code, kein „irgendwie so ähnlich“ - Quatsch voller 
zusätzlicher Fehler.

Wie heißt die Klasse denn nun wirklich, die du benutzen willst? 
SoftSerial oder SoftwareSerial, oder ganz anders?

Oliver

von Rolf M. (rmagnus)


Lesenswert?

Frank E. schrieb:
> g457 schrieb:
>>> bekomme es aber nicht hin
>>
>> Kuckst Du Fehlermeldung, sagt Dir was falsch ist.
>>
>> HTH
>
> Ne, sorry, die ist nicht besonders verständlich ...

Wenn du sie nicht verstehst, heißt das nicht, dass sie niemand auf der 
Welt versteht. Wenn du Fehler vom Compiler bekommst und hier nachfragst, 
immer die Fehlermeldung posten und angeben, auf welche Zeile des Code 
sie sich bezieht.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

1
#include <SoftwareSerial.h>
2
3
class SCPrinter
4
{
5
  private:
6
  SoftwareSerial serial;
7
  public:
8
  SCPrinter(int rx, int tx)
9
  { //<-- diese Zeile wird rosa markiert und es erscheint die Fehlermeldung
10
    serial = new SoftwareSerial(rx,tx,false);
11
  }
12
};
13
14
void setup(){}
15
void loop(){}

Fehlermeldung:

Arduino: 1.8.19 (Mac OS X), Board: "Arduino Uno"

/Users/frank/Documents/Arduino/softser_in_class/softser_in_class.ino: In 
constructor 'SCPrinter::SCPrinter(int, int)':
softser_in_class:9:3: error: no matching function for call to 
'SoftwareSerial::SoftwareSerial()'
   {
   ^
In file included from 
/Users/frank/Documents/Arduino/softser_in_class/softser_in_class.ino:1:0 
:
/Users/frank/Library/Arduino15/packages/arduino/hardware/avr/1.8.5/libra 
ries/SoftwareSerial/src/SoftwareSerial.h:92:3:  note: candidate: 
SoftwareSerial::SoftwareSerial(uint8_t, uint8_t, bool)
   SoftwareSerial(uint8_t receivePin, uint8_t transmitPin, bool 
inverse_logic = false);
   ^~~~~~~~~~~~~~
/Users/frank/Library/Arduino15/packages/arduino/hardware/avr/1.8.5/libra 
ries/SoftwareSerial/src/SoftwareSerial.h:92:3:  note:   candidate 
expects 3 arguments, 0 provided
/Users/frank/Library/Arduino15/packages/arduino/hardware/avr/1.8.5/libra 
ries/SoftwareSerial/src/SoftwareSerial.h:50:7:  note: candidate: 
constexpr SoftwareSerial::SoftwareSerial(const SoftwareSerial&)
 class SoftwareSerial : public Stream
       ^~~~~~~~~~~~~~
/Users/frank/Library/Arduino15/packages/arduino/hardware/avr/1.8.5/libra 
ries/SoftwareSerial/src/SoftwareSerial.h:50:7:  note:   candidate 
expects 1 argument, 0 provided
softser_in_class:10:44: error: no match for 'operator=' (operand types 
are 'SoftwareSerial' and 'SoftwareSerial*')
     serial = new SoftwareSerial(rx,tx,false);
                                            ^
In file included from 
/Users/frank/Documents/Arduino/softser_in_class/softser_in_class.ino:1:0 
:
/Users/frank/Library/Arduino15/packages/arduino/hardware/avr/1.8.5/libra 
ries/SoftwareSerial/src/SoftwareSerial.h:50:7:  note: candidate: 
SoftwareSerial& SoftwareSerial::operator=(const SoftwareSerial&)
 class SoftwareSerial : public Stream
       ^~~~~~~~~~~~~~
/Users/frank/Library/Arduino15/packages/arduino/hardware/avr/1.8.5/libra 
ries/SoftwareSerial/src/SoftwareSerial.h:50:7:  note:   no known 
conversion for argument 1 from 'SoftwareSerial*' to 'const 
SoftwareSerial&'
exit status 1
no matching function for call to 'SoftwareSerial::SoftwareSerial()'


Dieser Bericht wäre detaillierter, wenn die Option
"Ausführliche Ausgabe während der Kompilierung"
in Datei -> Voreinstellungen aktiviert wäre.

: Bearbeitet durch User
von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

1
#include <SoftwareSerial.h>
2
3
class SCPrinter
4
{
5
  private:
6
  SoftwareSerial * serial; //<----
7
  ...
8
};

Wenn ich an der markierten Stelle ein Sternchen einfüge, wird ohne 
Fehler compiliert. Testen, ob es wirklich funktioniert, kann ich gerade 
nicht, habe keinen Arduino in Reichweite, das muss bis Montag warten.

Mit diesem Detail von C++ muss ich mich wohl noch befassen ... :-)

von cppbert3 (Gast)


Lesenswert?

Frank E. schrieb:
> #include <SoftwareSerial.h>
> class SCPrinter
> {
>   private:
>   SoftwareSerial * serial; //<----
>   ...
> };
>
> Wenn ich an der markierten Stelle ein Sternchen einfüge, wird ohne
> Fehler compiliert. Testen, ob es wirklich funktioniert, kann ich gerade
> nicht, habe keinen Arduino in Reichweite, das muss bis Montag warten.
> Mit diesem Detail von C++ muss ich mich wohl noch befassen ... :-)

Mit new wird eine Instanz auf dem Heap angelegt, zurueck kommt ein 
Zeiger, also SoftwareSerial* und nicht wie bei dir ursprünglich 
SoftwareSerial

C++ Grundlagen und Pointer anschauen, new/delete usw.

von Oliver S. (oliverso)


Lesenswert?

cppbert3 schrieb:
> Frank E. schrieb:
>> #include <SoftwareSerial.h>
>> class SCPrinter
>> {
>>   private:
>>   SoftwareSerial * serial; //<----
>>   ...
>> };
>>
>> Wenn ich an der markierten Stelle ein Sternchen einfüge, wird ohne
>> Fehler compiliert. Testen, ob es wirklich funktioniert, kann ich gerade
>> nicht, habe keinen Arduino in Reichweite, das muss bis Montag warten.
>> Mit diesem Detail von C++ muss ich mich wohl noch befassen ... :-)
>
> Mit new wird eine Instanz auf dem Heap angelegt, zurueck kommt ein
> Zeiger, also SoftwareSerial* und nicht wie bei dir ursprünglich
> SoftwareSerial
>
> C++ Grundlagen und Pointer anschauen, new/delete usw.

Und wenn das verstanden wurde, drüber nachdenken, ob new da überhaupt 
erforderlich ist.

Oliver

von mIstA (Gast)


Lesenswert?

Frank E. schrieb:
> Ne, sorry, die ist nicht besonders verständlich ...

Frank E. schrieb:
> Wenn ich an der markierten Stelle ein Sternchen einfüge, wird
> ohne Fehler compiliert.


War das jetzt eine göttliche Eingebung oder kann es sein, daß die 
Fehlermeldung gar nicht so unverständlich ist, wenn man sie nur mal 
genau liest?

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

mIstA schrieb:
> Frank E. schrieb:
>> Ne, sorry, die ist nicht besonders verständlich ...
>
> Frank E. schrieb:
>> Wenn ich an der markierten Stelle ein Sternchen einfüge, wird
>> ohne Fehler compiliert.
>
> War das jetzt eine göttliche Eingebung oder kann es sein, daß die
> Fehlermeldung gar nicht so unverständlich ist, wenn man sie nur mal
> genau liest?

Wenn ich ehrlich bin, eine Eingebung nach erneuter Recherche, das 
Sternchen sah ich bei Stack Overflow. Danach habe ich keine Zeit weiter 
darauf ver(sch)wendet, der Fehlermeldung auf den Grund zu gehen. Ich 
brauche den Code dringend für eine anstehende Aufgabe ...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.