Fehler...aber warum?

thekiller

Viceinator
Hallo,

ich bin gerade dabei C++ zu lernen. Und nun steh ich vor einem Problem, was mir Kopfschmerzen bereitet. Fehler die ich einfach net verstehe...
Ich möchte mir einen eigenen Header schreiben mit Dateifunktionen/Klassen.

Hier erstmal der Code

Headerfile:
C++:
#ifndef FILEFUNCTIONS_H_
#define FILEFUNCTIONS_H_

class FileStream {
  private:
    long fSize;
    File *File;

  public:
    // Constructor
    FileStream();

    // Methods
    int open(string _fName, char _fMode);
};

#endif

Sourcefile:
C++:
#include "filefunctions.h"
#include <iostream>
#include <string>
#include <cstdlib>
#include <stdio.h>
#include <conio.h>

using namespace std;

// Constructor
FileStream::FileStream() {
}

// Methods
int FileStream::open(string _fName, char _fMode) {
  if((File = fopen(_fName.c_str(), _fMode)) == NULL) {
    return 1;
  }
  return 0;
}

Fehlermeldungen des Compilers:

File *File; => [C++ Fehler] filefunctions.h(7): E2303 Typname erwartet

File *File; => [C++ Fehler] filefunctions.h(7): E2139 In Deklaration fehlt ;

int open(string _fName, char _fMode); => [C++ Fehler] filefunctions.h(14): E2293 ) erwartet

int FileStream::open(string _fName, char _fMode) { => [C++ Fehler] filefunctions.cpp(15): E2316 'FileStream::open(string,char)' ist kein Element von 'FileStream'

Ich hoffe Ihr könnt diesen Fehlermeldungen mehr entnehmen als ich. Ich werd jedenfalls nicht draus schlau...

LG Manuel
 
Zuletzt bearbeitet von einem Moderator:
Wenn du im Header den Typ File benutzt musst du auch den Header einbinden in dem der definiert ist, der 2te Fehler ist nen Folgefehler bei den Anderen weiß ich es gerade nicht.

Edit der 4te is nen Folgefehler des Dritten, ich weiß aber gerade nicht, was den Dritten verursacht, vermutlich dein string, das müsste std::string heißen und du solltest <string> includieren, und nebenbei solltest du nicht so C und C++ mischen, naja, habe ich am Anfang auch gemacht, ist einfach leichter:D
 
Zuletzt bearbeitet:
Okay jetzt habe ich 3 Fehler behoben...aber einer is noch...

int open(string _fName, char _fMode); => [C++ Fehler] filefunctions.h(21): E2293 ) erwartet

Dieser Fehlermeldung kann ich echt nix entnehmen außer die Klammer, aber das Hilft mir gar nix...
 
Poste mal deinen neuen Code, denn in deinem jetzigen gibt es nicht mal ne Zeile 21 und solche Sachen liegen oft auch davor oder dahinter.
 
Ich lad mal mein Projekt hoch.
Ist für den Borland C++ Builder 6.0

So viel habe ich gar nicht an dem Quelltext verändert. Nur anscheinend noch nicht genug, dass es geht...
 

Anhänge

Ich habe es jetzt ein bisschen umgeschrieben, so dass es sich kompilieren lässt, anscheinend hat der ein Problem mit String als übergabe.

Bei der Gelegenheit, könntest du mir erklären, wie man mit dem Borland nen ganz normales Konsolenprogramm-Projekt erzeugt, ich bekomms nämlich nicht hin xD
 

Anhänge

Zuletzt bearbeitet:
Ich habe es jetzt ein bisschen umgeschrieben, so dass es sich kompilieren lässt, anscheinend hat der ein Problem mit String als übergabe.

Bei der Gelegenheit, könntest du mir erklären, wie man mit dem Borland nen ganz normales Konsolenprogramm-Projekt erzeugt, ich bekomms nämlich nicht hin xD

du hast using namespace std; vergessen( in der headerdatei )
 
Ich danke Euch beiden!!

Also Konsolen im Borland Compiler sind ganz einfach, also:

Neu->Weitere...->Konsolen-Experte

das wars =)

Ich danke nochmal =)

LG Manuel
 
@teambeta:
du hast using namespace std; vergessen( in der headerdatei )
"using namespace std;" sollte man in Header-Dateien vermeiden.
Schließlich würden dadurch alle cpp-Dateien, in die diese Header eingebunden werden, auf "namespace std" gesetzt.
Ich glaube mich zu erinnern, dass Meister Stroutsup vorgeschlagen hat, wie folgt zu verfahren.
Header-Datei-Beispiel:
Code:
class Test {
  void SetName(const std::string& name);
  ...
};
CPP-Datei:
Code:
#include "test.h"
using namespace std;

void Test::SetName(const string& name) {
  ...
}
 
@teambeta:

"using namespace std;" sollte man in Header-Dateien vermeiden.
Schließlich würden dadurch alle cpp-Dateien, in die diese Header eingebunden werden, auf "namespace std" gesetzt.
Ich glaube mich zu erinnern, dass Meister Stroutsup vorgeschlagen hat, wie folgt zu verfahren.
Header-Datei-Beispiel:
Code:
class Test {
  void SetName(const std::string& name);
  ...
};
CPP-Datei:
Code:
#include "test.h"
using namespace std;

void Test::SetName(const string& name) {
  ...
}

Mag sein, er hat hier aber nichts größeres vor, dass das jetzt groß stören würde.
 
Zurück