Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

09.07.2007, 20:09

STL-Strings ohne #include <string>?!

Bin zurzeit in Kapitel 11.
Meine Frage stellt sich bezüglich des ersten Themas "Standardwerte für Funktionsparameter"
Hier der Quelltext:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// C++ für Spieleprogrammierer

// Übung zu Kapitel 11

// Übung

//

#include <iostream>

using namespace std;

// Funktionsprototypen

//

void ZeigeKoordinaten (const string &sText, int Breite = 100, int Hoehe = 50);

// Hauptprogramm

// 

int main ()
{
    // Funktionsaufruf

    //

    ZeigeKoordinaten ("Kleines Icon 1");
    ZeigeKoordinaten ("Kleines Icon 2");
    ZeigeKoordinaten ("Mittleres Icon 1", 120, 60);
    ZeigeKoordinaten ("Mittleres Icon 2", 120, 60);
    ZeigeKoordinaten ("Grosses Icon", 150, 75);
    
    return (0);
} // main-Funktion


// ZeigeKoordinaten

//

void ZeigeKoordinaten (const string &sText, int Breite, int Hoehe)
{
    cout << "Folgender Button wurde erstellt:\n";
    cout << "--------------------------------\n";
    cout << "Name  : " << sText.c_str() << endl;
    cout << "Breite: " << Breite << endl;
    cout << "Hoehe : " << Hoehe << endl;
    cout << endl;

} // ZeigeKoordinaten


Bisser habe ich es gelernt, wenn man strings der STL einbinden möchte, dies anhand der Headerdatei <string> bewerkstelligen muss, doch wie ich dort erblickt habe scheint es auch ohne zu gehen.
Wie ist das möglich?
Hoffe ihr könnt mir weiterhelfen
"Wenn es keine Milch gäbe, würde ich auf Kaffee verzichten."

Progater

Treue Seele

Beiträge: 119

Wohnort: BW

  • Private Nachricht senden

2

09.07.2007, 20:38

Bin mir nicht sicher, aber ich antworte mal so:
Da, wo iostream deklariert ist, wird schon string eingebunden. Somit ist es nicht erforderlich den string nochmal mit einzubinden.
To go back to the drawing board is not everyone's cup of tea! :-)

3

09.07.2007, 20:44

Gut dies zu Wissen. Frage mich nur, weshalb darauf nicht eingegangen wurde :?
"Wenn es keine Milch gäbe, würde ich auf Kaffee verzichten."

FBI

Frischling

  • Private Nachricht senden

4

09.07.2007, 23:09

Wahrscheinlich hat Heiko Kalista es einfach übersehen.

Aber es schadet ja nichts, die string.h trotzdem einzubinden. Ich hab es mir angewöhnt überall, wo ich strings benötige, auch die entsprechende Headerdatei einzubinden. Nachteile hat das nicht und schafft meiner Meinung nach übersichtlichkeit.

5

09.07.2007, 23:49

Ja, werde auch das einbinden beibehalten :D
"Wenn es keine Milch gäbe, würde ich auf Kaffee verzichten."

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

6

10.07.2007, 01:42

Zitat von »"FBI"«

Wahrscheinlich hat Heiko Kalista es einfach übersehen.

Aber es schadet ja nichts, die string.h trotzdem einzubinden. Ich hab es mir angewöhnt überall, wo ich strings benötige, auch die entsprechende Headerdatei einzubinden. Nachteile hat das nicht und schafft meiner Meinung nach übersichtlichkeit.


Lass die Finger von string.h.

Das Ding bei std::string ist, dass das Template basic_string garnicht in string definiert ist. Das Template kann sonstwo definiert sein (bei VC++ z.B. in xstring, bei anderen Implementationen in basic_string usw...)
Dieser Header wird aber irgendwo in den inkludiertiefen vom Header istream ebenfalls inkludiert, welcher von iostream inkludiert wird. Ergo, mit inkludierten iostream kann man std::string verwenden.

Aber: in string sind einige Operatoren und Funktionen definiert nämlich Additions-, Vergleich- und Streamoperator (>>, <<) sowie die Funktion getline. Und diese Dinge funktionieren nur mit inkludiertem string Header.

Zitat von »"Fruchteis"«


Bisser habe ich es gelernt, wenn man strings der STL einbinden möchte, dies anhand der Headerdatei <string> bewerkstelligen muss, doch wie ich dort erblickt habe scheint es auch ohne zu gehen.
Wie ist das möglich?
Hoffe ihr könnt mir weiterhelfen


Das was du gelernt hast ist also nicht ganz korrekt! ;-)
@D13_Dreinig

FBI

Frischling

  • Private Nachricht senden

7

10.07.2007, 11:18

Zitat von »"David_pb"«


Lass die Finger von string.h.

Das Ding bei std::string ist, dass das Template basic_string garnicht in string definiert ist. Das Template kann sonstwo definiert sein (bei VC++ z.B. in xstring, bei anderen Implementationen in basic_string usw...)
Dieser Header wird aber irgendwo in den inkludiertiefen vom Header istream ebenfalls inkludiert, welcher von iostream inkludiert wird. Ergo, mit inkludierten iostream kann man std::string verwenden.

Aber: in string sind einige Operatoren und Funktionen definiert nämlich Additions-, Vergleich- und Streamoperator (>>, <<) sowie die Funktion getline. Und diese Dinge funktionieren nur mit inkludiertem string Header.


Mhm.. gut zu wissen, danke :)

8

10.07.2007, 11:49

Zitat

FBI hat Folgendes geschrieben:
Wahrscheinlich hat Heiko Kalista es einfach übersehen.

Aber es schadet ja nichts, die string.h trotzdem einzubinden. Ich hab es mir angewöhnt überall, wo ich strings benötige, auch die entsprechende Headerdatei einzubinden. Nachteile hat das nicht und schafft meiner Meinung nach übersichtlichkeit.


Lass die Finger von string.h.

Das Ding bei std::string ist, dass das Template basic_string garnicht in string definiert ist. Das Template kann sonstwo definiert sein (bei VC++ z.B. in xstring, bei anderen Implementationen in basic_string usw...)
Dieser Header wird aber irgendwo in den inkludiertiefen vom Header istream ebenfalls inkludiert, welcher von iostream inkludiert wird. Ergo, mit inkludierten iostream kann man std::string verwenden.

Aber: in string sind einige Operatoren und Funktionen definiert nämlich Additions-, Vergleich- und Streamoperator (>>, <<) sowie die Funktion getline. Und diese Dinge funktionieren nur mit inkludiertem string Header.

Fruchteis hat Folgendes geschrieben:

Bisser habe ich es gelernt, wenn man strings der STL einbinden möchte, dies anhand der Headerdatei <string> bewerkstelligen muss, doch wie ich dort erblickt habe scheint es auch ohne zu gehen.
Wie ist das möglich?
Hoffe ihr könnt mir weiterhelfen


Das was du gelernt hast ist also nicht ganz korrekt!


Ich hab das jetzt nicht so ganz verstanden, weshalb ich von #inlcude <string> die Finger lassen los. Was ist daran nun so schlecht :?:
"Wenn es keine Milch gäbe, würde ich auf Kaffee verzichten."

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

9

10.07.2007, 11:53

Zitat von »"Fruchteis"«


Ich hab das jetzt nicht so ganz verstanden, weshalb ich von #inlcude <string> die Finger lassen los. Was ist daran nun so schlecht :?:


Hab ich gesagt string? Ich sagte string.h. :roll:
@D13_Dreinig

10

10.07.2007, 20:28

Wie string.h?
Ich binde bis jetzt die STL - Strings mittels <string> ein und nicht mit "string.h" <-wusste garnicht das es diese Art von strings gibt?!
"Wenn es keine Milch gäbe, würde ich auf Kaffee verzichten."

Werbeanzeige