Liebe Leute,
ich sehe den Wald vor lauter Bäumen nicht. Es geht um C++, in diesem
Fall in der Arduino-gcc-Umgebung.
Ich habe eine Klasse PrintString und versuche sie zu benutzen wie folgt:
1 | class PrintString: public Print {
|
2 | String s;
|
3 | public:
|
4 | PrintString () {}
|
5 | virtual size_t write (uint8_t b) {s += (char)b; return 1;}
|
6 | operator String& () {return s;}
|
7 | };
|
8 |
|
9 | void setup() {
|
10 | Serial.begin(115200);
|
11 | }
|
12 |
|
13 | void loop() {
|
14 | const uint8_t txt[] = "Hello World";
|
15 | size_t tlen = sizeof(txt)-1;
|
16 | PrintString ps;
|
17 | ps.write(txt,tlen);
|
18 | ps.println();
|
19 | Serial.print(((String)ps).c_str());
|
20 | delay(10000);
|
21 | }
|
Dieser code übersetzt nicht, und ich verstehe nicht warum:
1 | "C:\\Users\\Hobbyraum\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR "-IC:\\Users\\Hobbyraum\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.3\\cores\\arduino" "-IC:\\Users\\Hobbyraum\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.3\\variants\\eightanaloginputs" "C:\\Users\\HOBBYR~1\\AppData\\Local\\Temp\\arduino_build_162151\\sketch\\test18.ino.cpp" -o "C:\\Users\\HOBBYR~1\\AppData\\Local\\Temp\\arduino_build_162151\\sketch\\test18.ino.cpp.o"
|
2 | C:\Users\Hobbyraum\Documents\Arduino\test18\test18.ino: In function 'void loop()':
|
3 | test18:17:20: error: no matching function for call to 'PrintString::write(const uint8_t [12], size_t&)'
|
4 | ps.write(txt,tlen);
|
5 | ^
|
6 | C:\Users\Hobbyraum\Documents\Arduino\test18\test18.ino:5:18: note: candidate: virtual size_t PrintString::write(uint8_t)
|
7 | virtual size_t write (uint8_t b) {s += (char)b; return 1;}
|
8 | ^~~~~
|
9 | C:\Users\Hobbyraum\Documents\Arduino\test18\test18.ino:5:18: note: candidate expects 1 argument, 2 provided
|
10 | exit status 1
|
11 | no matching function for call to 'PrintString::write(const uint8_t [12], size_t&)'
|
Print ist so definiert:
1 | class Print {
|
2 | ...
|
3 | public:
|
4 | ...
|
5 | virtual size_t write(uint8_t) = 0;
|
6 | virtual size_t write(const uint8_t *buffer, size_t size);
|
7 | ...
|
8 | size_t println(void);
|
9 | ...
|
10 | };
|
Wieso findet der Compiler println(void), jedoch nicht write(const
uint8_t *buffer, size_t size) ???
LG, Sebastian