[C++] Fehler unbegründet

Sircoly

Mitglied
Halli Hallo,

ich habe mir einen eigenen Header geschrieben und bekomme 2 Fehler ausgegeben:
Code:
'__cFile.h' Line 18': error: 'string' has not been declared
'__cFile.h' Line 18': error: ISO C++ forbids declaration of 'ext_cDestination' with no type

mein Quellcode lautet wie folgt:
(main.cpp)
C++:
/***** C++-Header *****/
#include <iostream>
#include <conio.h>

/***** Klassen-Header *****/
#include "__cFile.h"

/***** Kontrollstruktur *****/
#ifdef __DEBUG
    #define __DEBUG_OUTPUT(message) std::cout << "DEBUG: " << message << std::endl;
#else
    #define __DEBUG_OUTPUT(message)
#endif

/***** Namespace *****/
using namespace std;

/***** Hauptprogramm *****/
int main()
{
	cout << "Hello world!" << endl;
	return 0;
}

(__cFile.h)
C++:
/***** C++-Header *****/
#include <string.h>

/***** Klasse *****/
class __cFile
{
	/***** Private Variable *****/
	private:

	/***** Public Variable *****/
	public:

	/***** Private Function *****/
	private:

	/***** Public Function *****/
	public:
        bool Delete(string ext_cDestination);
};

(__cFile.cpp)
C++:
/***** Klassen-Header *****/
#include "__cFile.h"

bool __cFile::Delete(string ext_cDestination)
{
	/***** Deklaration *****/
	SHFILEOPSTRUCT sm_shFile;												// Variablendeklaration für Befehl
    CFileFind sm_cfData;													//
	bool sm_bNoError;														//

	/***** Definition *****/
	sm_bNoError = false;

	/***** Aktion *****/
    if(sm_cfData.FindFile(ext_cDestination))								// Wenn die Datei vorhanden ist
    {
		ext_cDestination += '\0';												// Terminator dranhängen

		ZeroMemory(&sm_shFile, sizeof(sm_shFile));								// Speicher räumen
		sm_shFile.wFunc = FO_DELETE;											// Befehl
		sm_shFile.pFrom = ext_cDestination;										// Ziel
		sm_shFile.fFlags= FOF_ALLOWUNDO;										// Aktion
		SHFileOperation(&sm_shFile);											// Operation durchführen

		sm_bNoError = true;														// Aktion durchgeführt
    }
    else																	// Wenn die Datei nicht vorhanden ist
		sm_bNoError = false;													// Aktion nicht durchgeführt

	return sm_bNoError;														// Funktion Terminieren
}


Ich weiß, dass es auch andere möglichkeiten gibt, Dateien zu löschen,
aber mich würde es trotzdem interessieren, wieso 'string' nicht deklariert sein sollte,
und wie ich die Fehler beheben kann.
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

versuch mal
Code:
#include <iostream>
#
/***** Namespace *****/
#
using namespace std;
in die Header mit rein zu nehmen...

MfG Turri
 
Halli Hallo,

kannst du mir das bitte etwas genauer erklären?
Ich weiß nicht, wie du das meinst, was ich machen soll.

Soll ich alle meine Header und das Namespace von der main.cpp in die restlichen Dateien kopieren,
oder was meinst du?
 
Hallo,

das
Code:
#include <iostream>
using namespace std;

raus aus der "main.cpp"
und rein die "__cFile.h"

__cFile.h

Code:
/***** C++-Header *****/
#include <string.h>
#include <iostream>

/***** Namespace *****/

using namespace std;
 
/***** Klasse *****/
...
MfG Turri
 
Hi.

Also eigentlich sollte man kein "using" Statement in Header Dateien verwenden da Header Dateien normalerweise von unterschiedlichsten anderen Dateien eingebunden werden und es dann leicht zu Namenskonflikten kommen kann.

Es ist generell eine bessere Idee die Typen einfach vollständig mit dem Namensraum zu qualifizieren:
C++:
public:        bool Delete(std::string ext_cDestination);

@Sircoly: Warum benennst du eigentlich deine Klasse mit 2 Unterstrichen? Die Bezeichner die mit 2 Unterstrichen beginnen sind reserviert - deshalb sollte man solche Bezeichner nicht für eigene Klassen, Funktionen usw. benutzen. Siehe http://www.informit.com/guides/content.asp?g=cplusplus&seqNum=185&rl=1

Gruß
 
Halli Hallo,

danke erstmal für die antworten und die Hilfe.

@deepthroat:
Das hat keinen Grund. Das habe ich mir einfach mal ausgedacht.
Aber gut zu wissen,. dass diese reserviert sind. Dann werde ich das von nun an berücksichtigen.

Hat zufällig jemand von euch eine teoretische Idee, wie ich 2 Ordner (C:\\a, C:\\b) vergleichen soll?
Ich möchte ein Programm schreiben, mit dem ich 2 Ordner vergleichen kann.
Wenn eine Datei nicht vorhanden ist, dann soll sie kopiert werden.
Soner Art PAP oder so.

Ich weiß, dass der Anfang mit FindFile() und FindNextFile() beginnen kann.
Mehr aber auch nicht. - Eine Idee?
 
Zurück