VC++ Wer da hat schon CEditView definiert?

Hallo!
Ich bins nochmal.
Bei einer primitiv-MFC-Anwendung, die eigentlich nur vom Assistenten erstellt worden ist (VC++.net) bekomme ich folgende Fehlermeldung:
error C2011:‚CEditView‘:‚class‘ Typneudefinition. Das Ganze passiert in der Datei afxext.h .
Wenn ich das richtig deute, hat irgendwer schon vorher eine Klasse dieses Namens definiert. Bloß, wie finde ich das??
Und überhaupt, wie kann das überhaupt passieren? - Ach ja, MS …

Gruß
Arndt

Hallo,

Du bindest halt eine Include-Datei mehrfach ein. Es muss sich dabei um eine der Header-Datein handeln, denn der Wizard immer die entsprechenden defines um dies abzusichern.

#if !defined(…)
#define

#endif

Das dies in der afxext.h passieren soll, halte ich fuer ausgeschlossen es sei denn Du hast Dein System vermurkst. Die afxext.h als MFC-Extension aendert man auf keinen Fall!!! Denn Sie wird von anderen Projekten ueber Stdafx.h auch angezogen.

CU

Hi!
Ich glaubs zwar nicht, aber ausschließen kann ich nicht, dass da was vermurkst ist. Leider meldet das Setup, dass zum Reparieren nicht genug Platz da ist. :frowning:
Kannst Du nicht mal nachsehen, ob in afxext.h CEditView definiert wird? Wenn nicht, ist das bei mir irgendwie da hineingeraten.
Ich vermute aber eher, dass es woanders (vorher) schonmal definiert wurde und da nicht hingehört. Bloß werde ich das wohl nie finden …
Die define-Abfrage dürfte wohl die Fehlermeldung beseitigen, wenn ich Pech habe aber auch die Funktion stören. Werds mal probieren.

Danke erstmal!
Arndt

Hallo,

ja, CEditView wird in afxext.h deklariert. Und diese Deklaration sollte auch am besten so bleiben, denn CEditView liegt in der Ableitungshierarchie (ausgehend von CObject) sehr tief.

Mir sieht es auf den ersten Blick so aus, dass Du afxext.h includierst, aber die defines nicht mehr stimmen. In afxext.h sind naemlich gewoehnlich die defines schon gesetzt ueber:

#ifndef __AFXEXT_H__
#define __AFXEXT_H__

#endif //__AFXEXT_H__

In der Regel nimmt man afxext.h in stdafx.h mit auf, das widerum vom Wizard generiert wurde und dort auch ueber defines mehrfach includierung ausschliesset:

Der Teil sollte in der Regel dann in etwa so aussehen:

#if !defined(AFX\_STDAFX\_H\_\_B1588CE4\_921D\_11D5\_AA8B\_000083445577\_\_INCLUDED\_)
#define AFX\_STDAFX\_H\_\_B1588CE4\_921D\_11D5\_AA8B\_000083445577\_\_INCLUDED\_

#if \_MSC\_VER \> 1000
#pragma once
#endif // \_MSC\_VER \> 1000

#define VC\_EXTRALEAN // Exclude rarely-used stuff from Windows headers

#include 
#include // sef(08/02/2001): Used for AnsiToUnicode method
#include 

// TODO: reference additional headers your program requires here

//{{AFX\_INSERT\_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX\_STDAFX\_H\_\_B1588CE4\_921D\_11D5\_AA8B\_000083445577\_\_INCLUDED\_)

Unter TODO solltest Du es includieren und dann im Projekt nach Mehrfacheinbindungen noch mal suchen, diese entfernen und immer nur stdafx.h jeweils in den cpp-Dateien einbinden.

Cu