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

xXSlayerXx

Treue Seele

  • »xXSlayerXx« ist der Autor dieses Themas

Beiträge: 111

Beruf: Technischer Produktdesigner

  • Private Nachricht senden

1

29.03.2013, 10:19

[C++] Auf Includes in Header zugreifen

Hi Leute,

ich habe ein kleines Problem.
Undzwar habe ich eine Headerdatei erstellt, in welcher eine Klasse definiert wird, und string und fstream includiert werden.

Nun hat es eigentlich immer funktioniert, dass ich wenn ich die Headerdatei in meiner .cpp Datei includiert habe, ich die includes von fstream und string nutzen kann.

Doch komischerweise, zeigt er mir dauernt an, dass string und fstream nicht deklariert sind. Hab ich da villeicht nen denkfehler drin?? Hier mal der Code:

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
//Header.hpp:

#include <string>
#include <iostream>
#include <fstream>

class test
{
     public:
        int Integer;

        void InitTes()t;
        void RenderTest();
};

// Test.cpp
#include "Header.hpp"

void InitTest()
{
//....
string Test;     //Hier kommt dirrekt der Fehler "Der Bezeichner string ist nicht definiert."

ifstream dat ("Dat.txt",ios::binary);     //Hier kommt der selbe Fehler
}

void RenderTest()
{
//....
}


kann mir jemand erklären, wo es da scheitert, dass die .cpp Datei die Includes kennt?

Mit freundlichem Gruß
xXSlayerXx
Bestes Zitat aus einem Quellcode :D

C-/C++-Quelltext

1
2
3
4
5
6
7
8
/** 
Once you are done trying to ‘optimize’ this routine, 
and have realized what a terrible mistake that was, 
please increment the following counter as a warning 
to the next guy: 

total_hours_wasted_here = 11 
*/

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »xXSlayerXx« (29.03.2013, 10:53)


Cookiezzz

Frischling

Beiträge: 91

Wohnort: Deutschland

Beruf: Schüler

  • Private Nachricht senden

2

29.03.2013, 10:23

Es heißt std::string und std::ifstream.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

29.03.2013, 10:34

Außerdem brauchst du für ifstream den Header <fstream> und wieso stehen die #include Direktiven überhaupt in Header.hpp wenn die inkludierten Header nur in der .cpp Datei benötigt werden?

xXSlayerXx

Treue Seele

  • »xXSlayerXx« ist der Autor dieses Themas

Beiträge: 111

Beruf: Technischer Produktdesigner

  • Private Nachricht senden

4

29.03.2013, 10:47

ist ein beispiel.
auf diese header greifen mehrere .cpp Dateien zu.

oh habe vergessen bei diesem beispiel <fstream> zu includieren.
Habe das natürlich in meinem Richtigen Programm.

danke für die antwort mit dem std::
ich denke, dass ich dann namespace dafür verwende
Bestes Zitat aus einem Quellcode :D

C-/C++-Quelltext

1
2
3
4
5
6
7
8
/** 
Once you are done trying to ‘optimize’ this routine, 
and have realized what a terrible mistake that was, 
please increment the following counter as a warning 
to the next guy: 

total_hours_wasted_here = 11 
*/

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »xXSlayerXx« (29.03.2013, 10:54)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

5

29.03.2013, 10:54

Und wirklich alle .cpp Dateien, die den Header inkludieren, benötigen auch <iostream> und <string>?

Meinst du mit "namespace dafür verwenden" using namespace ...? Sowas aber bitte nur in den jeweiligen .cpp Dateien. Eine solche using Direktive in einem Header ist eine der wenigen Sachen, von denen praktisch uneingeschränkt abzuraten ist. Einfacher Grund: Nehmen wir an, jemand anderes möchte deinen Code verwenden und inkludiert nichtsahnend deinen Header in seinem Programm. Er hat aber in seinem Programm schon irgendwo anders einen Typ, der den gleichen Namen hat wie irgend ein Typ aus einem der inkludierten Standard Header. Duch das using namespace in deinem Header verpestest du den globalen Namespace mit dem ganzen Inhalt des namespace std und plötzlich funktioniert in dem Programm des nichtsahnenden Users deines Code nichts mehr...

xXSlayerXx

Treue Seele

  • »xXSlayerXx« ist der Autor dieses Themas

Beiträge: 111

Beruf: Technischer Produktdesigner

  • Private Nachricht senden

6

29.03.2013, 10:55

Jop habe using namespace std; oben in dei .cpp Datei geschrieben.
Danke für den Tipp.
Bestes Zitat aus einem Quellcode :D

C-/C++-Quelltext

1
2
3
4
5
6
7
8
/** 
Once you are done trying to ‘optimize’ this routine, 
and have realized what a terrible mistake that was, 
please increment the following counter as a warning 
to the next guy: 

total_hours_wasted_here = 11 
*/

Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von »xXSlayerXx« (29.03.2013, 11:03)


CentuCore

Frischling

Beiträge: 43

Wohnort: Wien

  • Private Nachricht senden

7

29.03.2013, 12:41

Um es noch sauberer zu halten kannst du deine using Direktiven nur in die Funktionen/Methoden/Scopes setzen, welche die jew. Klassen (std::ifstream/std::string) auch verwenden.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

29.03.2013, 12:45

Oder noch besser keine using Direktiven verwenden sondern using Deklarationen:

C-/C++-Quelltext

1
using std::string;  // holt nur std::string in den scope und sonst nix

xXSlayerXx

Treue Seele

  • »xXSlayerXx« ist der Autor dieses Themas

Beiträge: 111

Beruf: Technischer Produktdesigner

  • Private Nachricht senden

9

29.03.2013, 13:01

Oder noch besser keine using Direktiven verwenden sondern using Deklarationen:

C-/C++-Quelltext

1
using std::string;  // holt nur std::string in den scope und sonst nix

ich denke, dass ist genau das richtige, was ich da gebrauchen kann.
Danke ;)
Bestes Zitat aus einem Quellcode :D

C-/C++-Quelltext

1
2
3
4
5
6
7
8
/** 
Once you are done trying to ‘optimize’ this routine, 
and have realized what a terrible mistake that was, 
please increment the following counter as a warning 
to the next guy: 

total_hours_wasted_here = 11 
*/

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

29.03.2013, 13:02

Aber nicht im Header... ;)

Werbeanzeige