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

01.08.2011, 20:06

Hilfe mit c++ classe

Hallo Leute ,

ist mein erster Post hier ;)

Und gleich zu meinem problem :

Ich versuche gerade so ne art Win32 consolen engine zu erstellen und naja ich versuche mich gerade an einem FileSystem das zwar bis jetzt noch nicht viel Sinn ergibt aber noch erweitert wird.
Dazu muss ich sagen dass ich ein eig. wircklicher Anfänger bin.

Also es soll dem benutzer eben die möglichkeit geben eine datei zu erstellen die einen benutzerdefinierten Namen und Type hat.
Das Problem ist nun dass der Compiler die ganze Zeit einen Fehler ausspuckt den ich überhaupt nicht verstehe.

Als erstes jedoch der code :
------------------------------
IFileSystem.h

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#ifndef IFILESYSTEM_H
#define IFILESYSTEM_H

class IFileSystem {

private :

char cFileName;
char cFileType;

public :

void add_IFile(const char* cFileName, const char* cFileType);

};

#endif

----------------------------
IFileSystem.cpp

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
#include "stdafx.h"

void IFileSystem::add_IFile(const char* cFileName, const char* cFileType){

string out = cFileName; // der name soll als zeichenkette angegeben werden
string out2 = cFileType; // auch hier

string outcomp = out , out2; //Wenn cFileName A ist und cFileType .B ist sollte eigentlich die Datei A.B rauskommen


fstream IFileStream(outcomp, ios::app | ios::out);

}


Und dann egen die instanz und die funktion :

C-/C++-Quelltext

1
2
IFileSystem FILE;
FILE.add_IFile("zzz",".yyy");


Nach meiner (hoffentlich logischen) Überlegung SOLLTE jetzt egentlich eine datei erstellt werden die zzz.yyy datei heißt doch was macht mcvc++ :

Quellcode

1
2
3
4
5
6
7
1>------ Erstellen gestartet: Projekt: RPG Consolegame, Konfiguration: Debug Win32 ------
1>  RPG Consolegame.cpp
1>  IFileSystem.cpp
1>d:\#cpp\rpg consolegame\rpg consolegame\ifilesystem.cpp(8): error C2086: 'std::string out2': Neudefinition
1>      d:\#cpp\rpg consolegame\rpg consolegame\ifilesystem.cpp(6): Siehe Deklaration von 'out2'
1>  Code wird generiert...
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========


1. Was will es ?
2. Unlogisch.Das ist ungefähr das gleich als wäre int a = 2; int b= a; falsch.

Und ich habe auch im internet geschaut doch da ist es genau so wie bei mir außer dass sie statt out , out2 -> out+out2 schreiben was garnicht gehen kann da man dazu int werte braucht (meines wissens nach).

Nunja ich hoffe das man mir hier helfen kann.
Bin natürlich für vereinfachungen , verbesserungen oder sonstige Vorschläge offen.

Danke euch allen im .v.o.r.r.a.u.s

- 7xCore

Ps: ???Deine Nachricht enthält folgende zensierte Wörter: v.o.r.r.a.u.s???

2

01.08.2011, 20:23

Zitat

Und ich habe auch im internet geschaut doch da ist es genau so wie bei mir außer dass sie statt out , out2 -> out+out2 schreiben was garnicht gehen kann da man dazu int werte braucht (meines wissens nach).

Doch, eben genau so solltest du es machen. Die schöne Klasse hat nämlich den +-Operator überladen. Der Kommaoperator hat in C++ eine ganz andere Funktion.
Der Dateiname wird von fstream als const char* erwartet, folglich wäre es angebracht, den ersten Konstruktorparameter von outcomp in outcomp.c_str() zu ändern.
Die Membervariablen der IFileSystem-Klasse sind übrigens nutzlos, sie werden nicht verwendet. Außerdem würdest du wenn dann jeweils einen char* haben wollen, da cFileName und cFileType nicht nur einzelne Zeichen speichern sollten.

Zur Lösung des letzten Problems

3

01.08.2011, 20:30

Also folglich statt

C-/C++-Quelltext

1
2
3
string out = cFileName; 
string out2 = cFileType; 
string outcomp = out , out2;


C-/C++-Quelltext

1
string outcomp = cFileType + cFileName;

?
Tut mir leid ich bin ein bisschen verwirrt da ich nun ein operator Problem habe.
Der sagt nämlich dass der + -Operator nur mit integralen Werten genommen werden kann ?!

Mfg

- 7xCore

4

01.08.2011, 20:32

Irgendwie blick ich gerade nicht durch ?(

5

01.08.2011, 20:37

Ich kann noch vermuten, dass du nicht beachtet hast, dass string im std-Namensraum liegt.

C-/C++-Quelltext

1
2
3
#include <string>
std::string s1, s2;
std::string s3 = s1 + s2; // ok

Nach dem Beheben dieses Fehler solltest du aber auch noch die anderen Hinweise in meinem vorherigen Beitrag beachten.

Addendum: Du solltest (nochmal) ein Grundlagenbuch lesen.

6

01.08.2011, 20:45

Mein eigentliches Problem war nun der header #include <string> ?! hatte ich wohl vergessen.

Danke trotzdem nun kann ich endlich weiter machen.

Also nochmals danke an dich :thumbsup:

C-/C++-Quelltext

1
2
3
4
5
6
string a = cFileName;
string b = cFileType;
string c = a+b;


fstream IFileStream(c.c_str(), ios::app | ios::out);

7

01.08.2011, 20:53

Dann kann ich es für den Benutzer eig. gleich noch einfacher machen

C-/C++-Quelltext

1
2
3
4
5
6
7
string sFN = cFileName;
string sFT = cFileType;
string sPDE = ".";
string sSTR = sFN+sPDE+sFT;


fstream IFileStream(sSTR.c_str(), ios::app | ios::out);

8

10.08.2011, 23:34

Noch etwas am Rande: Das Präfix 'I' deutet normalerweise darauf hin, dass es sich bei der "Klasse" um ein Interface handelt. Bei dir ist es aber noch nicht einmal eine abstrakte Klasse. Treffender wäre wohl die Bezeichnung CFileSystem oder einfach nur FileSystem.

Hier eine ausführliche Erklärung zum Thema Interface: http://www.c-plusplus.de/forum/41377

Werbeanzeige