Problem mit 'String st'

Gast #4139458
Lesenswert?

Hab hier zwei Deklarationen innerhalb einer Klasse die ich woanders 
weiterverwenden möchte.
1
void  print(char *st, int x, int y, int deg=0);
2
void  print(String st, int x, int y, int deg=0); // String <-- Problem
Ein Workaround mit typedef schlug leider fehl.
Wie kann ich beide Funktionen benutzen?
Ist 'String' ein Objekt?
Was muß ich inkludieren damit's geht?
Gast #4139482
Lesenswert?

>Ich nehme an du benutzt C++?
Ja. Aber ich habe wenig Erfahrung damit. Im Grunde möchte ich "nur ein 
paar" Zeilen Code anpassen. Eigentlich will ich bei diesem Projekt 
innerhalb von C++ bleiben.

>Dort gibt es keine Klasse die String heißt
>sondern höchstens std::string. Gibts im Header <string>.
Danke, aber das hilft mir leider nicht weiter. Hab jetzt per Trial&Error 
rumgepopelt, aber bei meinen rudimentären Kentnissen wird das grad' 
nix...
Gast #4139520
Lesenswert?

Lötkolben-Benutzer schrieb:
>>Dort gibt es keine Klasse die String heißt
>>sondern höchstens std::string. Gibts im Header <string>.
> Danke, aber das hilft mir leider nicht weiter. Hab jetzt per Trial&Error
> rumgepopelt, aber bei meinen rudimentären Kentnissen wird das grad'
> nix...
Was ist dein Problem? was sagt der Compiler?

Noch mal zum verständnis:
In C++ gibt es keine Standardklasse die "String" heisst. Es gibt aber 
die Klasse "string", im Namensraum "std".
1
#include <string>
2

3
void foo(std::string st ...
Gast #4139647
Lesenswert?

>Noch mal zum verständnis:
>In C++ gibt es keine Standardklasse die "String" heisst. Es gibt aber
>die Klasse "string", im Namensraum "std".
Schon klar. Aber wie passe ich das an, damit das Problem:
#include <string>
void  print(String st, int x, int y, int deg=0);

error: 'String' has not been declared

verschwindet? Mit 'namespace' habe ich ein bisschen rumexperimentiert, 
bin aber nicht weit gekommen.'
Gast #4139690
Lesenswert?

1
void  print(std::string st, int x, int y, int deg=0);
> Das "sting" musst du klein schreiben und mit "std::" sagen, dass es aus
> dem std Namespace kommt.

Nicht die beste Idee, wenn man nicht einmal weiß, was "String" (genau) 
ist. Dann wird der Compiler evtl. als nächstes darüber meckern, dass 
Operation soundso nicht bekannt ist.
@TO: Entweder nicht verwenden (auskommentieren), falls sinnvoll oder 
nachsehen, was String ist und was davon benötigt wird.
Gast #4139704
Lesenswert?

Grrr!
Eclipse findet den Pfad zu #include<string> nicht findet.
Gleicher Fall wie hier:
http://stackoverflow.com/questions/7905025/string-could-not-resolved-error-in-eclipse-for-c

So ist das halt mit der freien Software, die stets ohne 
Qualitätssicherung rausgehauen wird. Yoo, Hauptsache über den grünen 
Klee gelobt.


Jetzt hab ich aber noch ein zweites, viel merkwürdigeres Problem:
Angefangen habe ich dieses C++ Projekt mit einem Hallo-Welt Led-Blinker. 
Schon vor dem kompilieren kam der Fehler:
1
      blinkLed.turnOn();
2
      timer.sleep(BLINK_ON_TICKS);
3

4
      blinkLed.turnOff();
5
      timer.sleep(BLINK_OFF_TICKS);
Invalid arguments '
Candidates are:
void sleep()
'  main.cpp  /test_c++/src  line 82  Semantic Error

Wegbekommen habe ich ihn indem ich eine .h Datei in .hpp geändert habe. 
Zufall? Jetzt sehe ich den Fehler wieder.


Das hier steht in Timer.hpp:
1
#ifndef TIMER_H_
2
#define TIMER_H_
3

4
#include "cmsis_device.h"
5

6
// ----------------------------------------------------------------------------
7

8
class Timer
9
{
10
public:
11
  typedef uint32_t ticks_t;
12
  static constexpr ticks_t FREQUENCY_HZ = 1000u;
13

14
private:
15
  static volatile ticks_t ms_delayCount;
16

17
public:
18
  // Default constructor
19
  Timer() = default;
20

21
  inline void
22
  start(void)
23
  {
24
    // Use SysTick as reference for the delay loops.
25
    SysTick_Config(SystemCoreClock / FREQUENCY_HZ);
26
  }
27

28
  static void  sleep(ticks_t ticks);
29

30
  inline static void
31
  tick(void)
32
  {
33
    // Decrement to zero the counter used by the delay routine.
34
    if (ms_delayCount != 0u)
35
      {
36
        --ms_delayCount;
37
      }
38
  }
39
};
40

41
// ----------------------------------------------------------------------------
42

43
#endif // TIMER_H_

Und die Schalter:
-DDEBUG -DUSE_FULL_ASSERT -DSTM32F407xx -DUSE_HAL_DRIVER 
-DHSE_VALUE=8000000 -I"../include" -I"../system/include" 
-I"../system/include/cmsis" -I"../system/include/stm32f4-hal" 
-std=gnu++11 -fabi-version=0 -fno-exceptions -fno-rtti 
-fno-use-cxa-atexit -fno-threadsafe-statics

Hab eben -x ausprobiert, kein Erfolg.

Jemand ne Idee?
#4139728
Lesenswert?

Lötkolben-Benutzer schrieb:
> Wegbekommen habe ich ihn indem ich eine .h Datei in .hpp geändert habe.
> Zufall? Jetzt sehe ich den Fehler wieder.

Ziemlich blöde Idee. Vermutlich findet ein #include die Datei jetzt 
nicht mehr und du kriegst möglicherweise eine andere Fehlermeldung. Am 
eigentlichen Problem hat das aber sicher nichts geändert.

Lötkolben-Benutzer schrieb:
> Invalid arguments '
> Candidates are:
> void sleep()
> '  main.cpp  /test_c++/src  line 82  Semantic Error

Invalid arguments hört sich fast so an als ob er die Defines 
BLINK_ON_TICKS/BLINK_OFF_TICKS nicht findet oder die irgendwie 
schwachsinnig definiert sind. Prüfe doch mal wo die definiert werden 
oder setze testweise direkt eine Zahl ein.
Gast #4140037
Lesenswert?

>> Wegbekommen habe ich ihn indem ich eine .h Datei in .hpp geändert habe.
>> Zufall? Jetzt sehe ich den Fehler wieder.

>Ziemlich blöde Idee.
Kann man so nicht sagen. Der Fehler ging zunächst mal weg, weil - ich 
vermute stark - dies etwas mit dem Indexer von Eclipse zu tun hat.
Die notwendigen Änderungen zum kompilieren habe ich natürlich 
vorgenommen, man ist ja kein Irrenhäusler. Der Fehler kam durch die 
Projekteinstellungen. Nun habe ich die Einstellungen im Indexer geändert 
und es scheint zu gehen.

>Ziemlich blöde Idee.
Für eine blöde Idee halte ich eher, daß die die Klasse 'Timer' in einem 
.h file und nicht in einem .hpp file zu finden ist...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren