Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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.

Geschrieben
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.
Geschrieben

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).

Geschrieben
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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...