Compilation error: 'string' was not declared in this scope (Deutsch)

Hi,
ich baue gerade einen Entfernungsmesser mit einem Sensor und Display und als ich den Code überprüfen lies, hat er gesagt, dass etwas im Code fehlt. Ich weis aber nicht was. Vielleicht hat ja jemand eine Idee.

Fehlermeldung:

Using board 'uno' from platform in folder: C:\Users\maxim\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6
Using core 'arduino' from platform in folder: C:\Users\maxim\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.6
Verwendete Bibliotheken erkennen...
"C:\\Users\\maxim\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\\Users\\maxim\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino" "-IC:\\Users\\maxim\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\standard" "C:\\Users\\maxim\\AppData\\Local\\Temp\\arduino-sketch-DA3F2FAFE088E560041E2DA76828E137\\sketch\\Mint_Entfernungssensor__unfertig.ino.cpp" -o nul
Alternativen für LiquidCrystal.h: [LiquidCrystal@1.0.7]
ResolveLibrary(LiquidCrystal.h)
  -> Kandidaten: [LiquidCrystal@1.0.7]
"C:\\Users\\maxim\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\\Users\\maxim\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino" "-IC:\\Users\\maxim\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\standard" "-IC:\\Users\\maxim\\AppData\\Local\\Arduino15\\libraries\\LiquidCrystal\\src" "C:\\Users\\maxim\\AppData\\Local\\Temp\\arduino-sketch-DA3F2FAFE088E560041E2DA76828E137\\sketch\\Mint_Entfernungssensor__unfertig.ino.cpp" -o nul
"C:\\Users\\maxim\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\\Users\\maxim\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino" "-IC:\\Users\\maxim\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\standard" "-IC:\\Users\\maxim\\AppData\\Local\\Arduino15\\libraries\\LiquidCrystal\\src" "C:\\Users\\maxim\\AppData\\Local\\Arduino15\\libraries\\LiquidCrystal\\src\\LiquidCrystal.cpp" -o nul
Funktionsprototypen werden generiert...
"C:\\Users\\maxim\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -flto -w -x c++ -E -CC -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\\Users\\maxim\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino" "-IC:\\Users\\maxim\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\standard" "-IC:\\Users\\maxim\\AppData\\Local\\Arduino15\\libraries\\LiquidCrystal\\src" "C:\\Users\\maxim\\AppData\\Local\\Temp\\arduino-sketch-DA3F2FAFE088E560041E2DA76828E137\\sketch\\Mint_Entfernungssensor__unfertig.ino.cpp" -o "C:\\Users\\maxim\\AppData\\Local\\Temp\\arduino-sketch-DA3F2FAFE088E560041E2DA76828E137\\preproc\\ctags_target_for_gcc_minus_e.cpp"
"C:\\Users\\maxim\\AppData\\Local\\Arduino15\\packages\\builtin\\tools\\ctags\\5.8-arduino11/ctags" -u --language-force=c++ -f - --c++-kinds=svpf --fields=KSTtzns --line-directives "C:\\Users\\maxim\\AppData\\Local\\Temp\\arduino-sketch-DA3F2FAFE088E560041E2DA76828E137\\preproc\\ctags_target_for_gcc_minus_e.cpp"
Sketch wird kompiliert...
"C:\\Users\\maxim\\AppData\\Local\\Arduino15\\packages\\arduino\\tools\\avr-gcc\\7.3.0-atmel3.6.1-arduino7/bin/avr-g++" -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10607 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR "-IC:\\Users\\maxim\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\cores\\arduino" "-IC:\\Users\\maxim\\AppData\\Local\\Arduino15\\packages\\arduino\\hardware\\avr\\1.8.6\\variants\\standard" "-IC:\\Users\\maxim\\AppData\\Local\\Arduino15\\libraries\\LiquidCrystal\\src" "C:\\Users\\maxim\\AppData\\Local\\Temp\\arduino-sketch-DA3F2FAFE088E560041E2DA76828E137\\sketch\\Mint_Entfernungssensor__unfertig.ino.cpp" -o "C:\\Users\\maxim\\AppData\\Local\\Temp\\arduino-sketch-DA3F2FAFE088E560041E2DA76828E137\\sketch\\Mint_Entfernungssensor__unfertig.ino.cpp.o"
C:\Users\maxim\Downloads\Mint_Entfernungssensor__unfertig\Mint_Entfernungssensor__unfertig.ino: In function 'void loop()':
C:\Users\maxim\Downloads\Mint_Entfernungssensor__unfertig\Mint_Entfernungssensor__unfertig.ino:48:25: error: 'string' was not declared in this scope
   lcd.print("object:" + string(distance) + " cm   ");
                         ^~~~~~
C:\Users\maxim\Downloads\Mint_Entfernungssensor__unfertig\Mint_Entfernungssensor__unfertig.ino:48:25: note: suggested alternative: 'String'
   lcd.print("object:" + string(distance) + " cm   ");
                         ^~~~~~
                         String

Bibliothek LiquidCrystal in Version 1.0.7 im Ordner: C:\Users\maxim\AppData\Local\Arduino15\libraries\LiquidCrystal  wird verwendet
exit status 1

Compilation error: 'string' was not declared in this scope

Code:

#include <LiquidCrystal.h>

const int rs = 8, en = 9, d4 = 10, d5 = 11, d6 = 12, d7 = 13;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

int seconds = 0;


#define PIN_TRIGGER 7
#define PIN_ECHO    6
const int SENSOR_MAX_RANGE = 300; // in cm
float duration;
float distance;

void setup() 
{
pinMode(PIN_TRIGGER, OUTPUT);
pinMode(12, OUTPUT);
pinMode(PIN_ECHO, INPUT);
//pinMode(ALARM, INPUT);
digitalWrite(12, HIGH);
lcd.begin(16, 2);
lcd.print("you are dumb");
digitalWrite(PIN_TRIGGER, LOW);

delay(2000);
}

void loop() 
{
digitalWrite(PIN_TRIGGER, HIGH);
delayMicroseconds(10);

digitalWrite(PIN_TRIGGER, LOW);

duration = pulseIn(PIN_ECHO, HIGH);
distance = duration/58.224163;

if (distance > SENSOR_MAX_RANGE || distance <= 0) {
  lcd.setCursor(0, 0);
  lcd.print("Out of sensor   ");
  lcd.setCursor(0, 1);
  lcd.print("range!   ");
 } else {
  lcd.setCursor(0, 0);
  lcd.print("Distance to   ");
  lcd.setCursor(0, 1);
  lcd.print("object:" + string(distance) + " cm   ");
  }

  delay(1000);


}

Ich denke, das man der Meldung glauben darf!

Was soll denn überhaupt der Bezeichner string an der Stelle tun?
Was ist da dein Wunsch?

Ich möchte das er auf dem Display die gemessene Distanz anzeigt
KA wie ich das mache

z.B. mit lcd.print()

Hab ich gemacht. Oben steht der Code

Verwenden Sie ein großes S

lcd.print("object:" + String(distance) + " cm "); // capital S

1 Like

Nein!
Dort versucht du eine Unmöglichkeit!
Und erhältst die passende Antwort vom Kompiler!

  lcd.print("object:");
  lcd.print(distance);
  lcd.print(" cm ");

:man_facepalming: War tatsächlich das kleine S! Danke!

Ja, Dies ist aus Sicht der Speichernutzung besser

Ja... Der String ist da völlig unnötig!

Subjektiv:
Dieses ist schöner zu lesen

#include <Streaming.h> // die Lib findest du selber ;-)

vod ausgabe()
{
  lcd << "object: " << distance << " cm ";
}

muss ich, wenn ich das so übernehmen möchte, die eine Zeile mit dem String ersetzen, oder noch mehr?

Verstehe ich nicht.

Du verwendest einfach die Schreibweise:

  1. welche dir am besten gefällt
  2. das tut was du möchtest
  3. am wenigsten Schaden/Probleme anrichtet

wenn du den Streaming weg gehen willst, dann machs bei allen lcd.print Zeilen.

imho solltest du mal zum F-Makro nachlesen und dieses für Fixtexte nutzen.

if (distance > SENSOR_MAX_RANGE || distance <= 0) {
  lcd.setCursor(0, 0);
  lcd.print(F("Out of sensor   "));
  lcd.setCursor(0, 1);
  lcd.print(F("range!   "));
 } else {
  lcd.setCursor(0, 0);
  lcd.print(F("Distance to   "));
  lcd.setCursor(0, 1);
  lcd.print(F("object:"));
  lcd.print(distance);
  lcd.print(F(" cm   "));
  }

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.