Narf! Geschrieben 5. Juni 2008 Geschrieben 5. Juni 2008 Hallo, ich bin dabei eine große XML-Datei zu parsen und habe mir von MS das Beispiel für ISAXXMLReader angesehen. Dazu habe ich mir den SAXAppWizzard heruntergeladen und das Beispiel ausprobiert. Beim Kompilieren trat der Fehler auf, das die Variable "*Test*" nicht vorhanden ist. Das muss man in "A1" ändern. Das CMD-Tool läuft dann anständig durch. Jetzt möchte ich das ganze in mein MFC-Dialog-Projekt einbinden. Und jetzt der Fehler: XMLContentHandler * XMLContentHandler::CreateInstance() { XMLContentHandler * pXMLContentHandler = NULL; pXMLContentHandler = new XMLContentHandler(); //ERROR assert(pXMLContentHandler!=NULL); return pXMLContentHandler; } ERROR: XMLContentHandler.cpp(27): error C2259: 'XMLContentHandler': Instanz von abstrakter Klasse kann nicht erstellt werden Wie kann das sein, wenn es bei CMD funktioniert. Die Aufrufe sind genau die selben und XMLContentHandler ist keine abstrakte Klasse, also kein void Name()=0; oder so. Zitieren
Klotzkopp Geschrieben 5. Juni 2008 Geschrieben 5. Juni 2008 ERROR: XMLContentHandler.cpp(27): error C2259: 'XMLContentHandler': Instanz von abstrakter Klasse kann nicht erstellt werden Wie kann das sein, wenn es bei CMD funktioniert.Du hast irgendwas kaputt gemacht. Die Aufrufe sind genau die selben und XMLContentHandler ist keine abstrakte Klasse, also kein void Name()=0; oder so.Die Klasse ist aber letztendlich von ISAXContentHandler abgeleitet. Und das ist ein Interface. Deine Klasse muss alle rein virtuellen Methoden von ISAXContentHandler implementieren. Vielleicht hast du eine umbenannt. Die Klassendefinition von XMLContentHandler wäre hier hilfreich. Zitieren
Narf! Geschrieben 5. Juni 2008 Autor Geschrieben 5. Juni 2008 Du hast irgendwas kaputt gemacht. Ich war's nich'. Ich habe praktisch nur die Dateien umbenannt. Was vorher a1ContentHandler.cpp/.h war ist jetzt XMLContentHandler.cpp/.h und a1->XML. Sonst ist alles das selbe. Hier die Ableitungen: ISAXContentHandler (abstrakt) <- SAXContentHandlerImpl (hat alles übernommen) <- XMLContentHandler (übernimmt nur die benötigten Funktionen). Zitieren
Klotzkopp Geschrieben 5. Juni 2008 Geschrieben 5. Juni 2008 Stell mal in den Projekteigenschaften C/C++ > Language > Treat wchar_t as Built-in Type auf No. Zitieren
Narf! Geschrieben 5. Juni 2008 Autor Geschrieben 5. Juni 2008 Aha, es läuft. Was genau habe ich da jetzt gemacht? Zitieren
Klotzkopp Geschrieben 5. Juni 2008 Geschrieben 5. Juni 2008 Aha, es läuft. Was genau habe ich da jetzt gemacht?In älteren Versionen von VC (vor 2005) war wchar_t standardmäßig ein typedef auf unsigned short*. Aus dieser Zeit stammt auch das Interface, dort sind die jeweiligen Parameter auch als unsigned short* deklariert. Seit VC++ 2005 ist wchar_t standardmäßig ein eingebauter Typ, wie es der C++-Standard vorschreibt. Damit passt das nicht mehr zum Interface. Zitieren
Narf! Geschrieben 5. Juni 2008 Autor Geschrieben 5. Juni 2008 Und damit sind wir beim nächsten Problem: ISAXXMLReader:: parseURL(unsigned short *URL); Wie bekomme ich den da einen Pfad (CString) rein? Zitieren
Klotzkopp Geschrieben 5. Juni 2008 Geschrieben 5. Juni 2008 Wenn dein CString kein Unicode ist, dann nimm CStringW. Oder stell dein Projekt auf Unicode um. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.