Class Fehler in fertigem C++ Projekt von codeproject.com ?

dannym

Lieutnant
Mitglied seit
07.06.2009
Beiträge
54
Renomée
0
Ich habe mir von codeproject.com ein eigentlich fertiges Projekt namens CDirectoryChangeWatcher zum Überwachen eines Verzeichnisses herunter geladen.

Leider enthält scheint das Projekt beim Öffnen in meinem Visual Studio C++ 2005 Express noch ein paar von mir nicht ganz gelöste Fehler zu haben.

1.) Beim ersten Öffen muss das Projekt ins aktuelle Visual C++ Project Format konvertiert werden.
Gelöst.

2.) In der StdAfx.h wird ein Include namens "afxwin.h" nicht gefunden.
Habe ich durch hinzufügen des zusätzlichen Include Verzeichnisses "C:\Programme\Microsoft Platform SDK\Include\mfc" in den Projekteinstellungen gelöst.

3.)Beim Build kommt gleich zwei mal untereinander der Error

"C:\projects\cdirectorychangewatcher\delayeddirectorychangehandler.h(297) : error C2248: 'CDirectoryChangeWatcher::CDirWatchInfo' : cannot access private class declared in class 'CDirectoryChangeWatcher'
C:\projects\cdirectorychangewatcher\directorychanges.h(414) : see declaration of 'CDirectoryChangeWatcher::CDirWatchInfo'
C:\projects\cdirectorychangewatcher\directorychanges.h(357) : see declaration of 'CDirectoryChangeWatcher'"

Hier kenne ich mich zwenig mit Klassen aus um den Fehler zu beheben. Vielleicht kann sich da bitte jemand von euch den Quellcode im "Download demo project - 152 Kb" File anschauen?


Code:
[B]DelayedDirectoryChangeHandler.h:[/B]
...
friend class CDirectoryChangeWatcher;
friend class CDirectoryChangeWatcher::CDirWatchInfo;                       [B]// hier kommt der Error[/B]
...


[B]DirectoryChanges.h:[/B]
...
class CDirWatchInfo 
{                                    [B]Auf diesen Zeile wird im oberen see Declaration Hinweis verwiesen[/B]
private:
	CDirWatchInfo();		//private & not implemented
	CDirWatchInfo & operator=(const CDirWatchInfo & rhs);//so that they're aren't accidentally used. -- you'll get a linker error
public:
	CDirWatchInfo(HANDLE hDir, const CString & strDirectoryName, 
				  CDirectoryChangeHandler * pChangeHandler, 
				  DWORD dwChangeFilter, BOOL bWatchSubDir, 
				  bool bAppHasGUI,
				  LPCTSTR szIncludeFilter,
				  LPCTSTR szExcludeFilter,
				  DWORD dwFilterFlags);
private:
	~CDirWatchInfo( );//only I can delete myself....use DeleteSelf()
public: ...
 
Zuletzt bearbeitet:
Das ist sicher ein VC++ 6.0 Projekt, zuweilen ändern sich Kleinigkeiten an den Compilern zwischen den Versionen, daher die Fehler.

Bei dem konkreten Fehler kannst du einfach die Klasse public machen, dann könnte es funktionieren.

Da ich eine ungefähre Ahnung habe, was du vorhast - investiere da mal nicht zu viel Zeit. Auch das fertig gebaute Programm macht noch nicht das, was du möchtest.

Statt dessen eine DOS-Applikation erzeugen und das Ganze in C programmieren (C++ brauchst du nicht, wenn dir das schwer fällt). Erst die Handle aufs Directory holen mit "CreateFile" und dann auf das Directory "ReadDirectoryChangesW" anwenden.
 
Ja, ist ein VS 6.0 Projekt, und darüber sind auch andere schon gestolpert.

Im Artikel http://www.codeproject.com/KB/files/directorychangewatcher.aspx auch mal weiter unten die Kommentare und Fragen anderer User lesen.

Hi,
In DirectoryChanges.h, around line 408, add the following line:

friend class CDelayedDirectoryChangeHandler;

This is a result of new compiler standards compliance behavior. There are a bunch of other errors you'll get if you're on VS2008, but they're easy enough to fix.
 
Zurück
Oben Unten