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

Viktor

Alter Hase

  • »Viktor« ist der Autor dieses Themas

Beiträge: 533

Wohnort: Ludwigshafen

Beruf: Student

  • Private Nachricht senden

1

04.04.2008, 18:36

[C++] Datei öffnen, lesen und schließen

Hallo,

folgende Situation:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int Open(char* p_PathAndName)
{
  fstream Datei;
  if(!Datei) 
    return 1;
  Datei.open(p_PathAndName, ios::in);
  return 0; // return Datei

}

int Read() // int Read(... Datei)

{
  string buffer;
  getline(Datei, buffer);
  return buffer;
}

int Close() // int Close(... Datei)

{
  Datei.close();
}

Es scheint wohl offensichtlich zu sein, dass "Datei" bei der Funktion Open()
als return zurückgegeben werden muss, welchen Typ muss dann aber die Funktion haben. Desweiteren muss ja "Datei" noch an die anderen Funktionen übergeben werden. Wie aber soll das gemacht werden?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

2

04.04.2008, 18:58

Machso so:

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
int open( const  char* pPathAndName, std::fstream& Datei )
{
  // ...

}

int Read( std::fstream& Datei )
{
  // ...

}

int Close( std::fstream& Datei )
{
  // ...

}

// ...


std::fstream stream;

Open( "foobar.txt", stream );
int value = Read( stream );
Close( stream );
@D13_Dreinig

Viktor

Alter Hase

  • »Viktor« ist der Autor dieses Themas

Beiträge: 533

Wohnort: Ludwigshafen

Beruf: Student

  • Private Nachricht senden

3

04.04.2008, 19:26

Danke, funktioniert sogar noch besser, da es allgemein gültig ist und nicht auf einen Stream beschränkt ist (von der Namensgebung her).

4

05.04.2008, 11:25

Wenn man fragen darf: Wofür das Ganze? Konstruktor von std::fstream zum Öffnen der Datei, Destruktor zum Schließen und operator>> zum auslesen (oder read). Fertig.
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

5

05.04.2008, 11:30

Vielleicht will er ja auch generalisierte Objekte unterstützten? :)
@D13_Dreinig

6

05.04.2008, 11:35

Dann kann er sich einen offenen Stream übergeben lassen ...
Devil Entertainment :: Your education is our inspiration
Der Spieleprogrammierer :: Community Magazin
Merlin - A Legend awakes :: You are a dedicated C++ (DirectX) programmer and you have ability to work in a team? Contact us!
Siedler II.5 RttR :: The old settlers-style is comming back!

Also known as (D)Evil

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

7

05.04.2008, 11:46

Macht er ja, bei Read und Close.
@D13_Dreinig

Viktor

Alter Hase

  • »Viktor« ist der Autor dieses Themas

Beiträge: 533

Wohnort: Ludwigshafen

Beruf: Student

  • Private Nachricht senden

8

05.04.2008, 17:29

soweit so gut, jetzt hab ich daten aus der datei ausgelesen und will sie aber in eine private Variablen einer anderen Klasse schreiben. Dazu habe ich jetzt versucht, mittels friend auf diese Variablen zuzugreifen, aber egal ob ich die ganze klasse als friend oder nur (was sinnvoller wäre) die readfunktion als friend bezeichne, es will nicht funktionieren:

Klasse1.h:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
class Klasse1
{
public:

    int Check();

private:

    char p_Text[100];
   int f_Read(fstream& fd_Stream);
    ....open und close
};

Klasse1.cpp:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
int Klasse1::f_Read(fstream& fd_Stream)
{
    ... //wird in p_Text gespeichert
}
int Klasse1::Check()
{
    *p_Text = f_Read(fd_Stream);
    if(strncmp("dumdiedum", p_Text, 3))
    {
    Klasse2::i_bla = static_cast<int>(f_Read(fd_scriptStream);
    }
}

Klasse2:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
class Klasse2
{
    friend int f_Check(fstream& fd_scriptStream);

public: 

    ...

private:
    
    int i_bla;

};


Kleine ungereimtheiten bitte ignorieren, habs etwas anders aufgeschrieben. Es geht im prinziep nur um die friend-variablensachen

DasBlub

Alter Hase

Beiträge: 802

Wohnort: Schweiz

Beruf: Programmierer

  • Private Nachricht senden

9

05.04.2008, 23:48

was mir auffält: du hast bei dieser zeile in klasse1.cpp eine Klammer vergessen:

C-/C++-Quelltext

1
Klasse2::i_bla = static_cast<int>(f_Read(fd_scriptStream); 

richtig wäre:

C-/C++-Quelltext

1
Klasse2::i_bla = static_cast<int>(f_Read(fd_scriptStream)); 


ps: gebrauch doch im forum C++-Code statt Code, dann gibts syntax-highlighting

Viktor

Alter Hase

  • »Viktor« ist der Autor dieses Themas

Beiträge: 533

Wohnort: Ludwigshafen

Beruf: Student

  • Private Nachricht senden

10

06.04.2008, 00:15

Ok, Problem ist gelöst. danke, war aber nicht die Klammer.
Musste vor die privaten Variablen der Klasse2 noch ein static setzten...

Werbeanzeige