pure virtual method called tieferes Verständnis
-
Hallo zusammen,
mein Problem ist der Aufruf einer Funktion mit dem darauf folgenden Abbruch durch die Fehlermeldung 'pure virtual method called'
Der folgende Code funktioniert einwandfrei:
XMLPlatformUtils::Initialize(); //An dieser Stelle einen Parser erstellen dem wir im folgenden ein File übergeben. XercesDOMParser *parser = new XercesDOMParser; parser->setValidationScheme(XercesDOMParser::Val_Auto); parser->setDoNamespaces(false); parser->setDoSchema(false); parser->setValidationSchemaFullChecking(false); parser->setCreateEntityReferenceNodes(false); //Das XMI-File durch den Parser einlesen parser->parse(argv[1]); //Die Repräsentation des Modells holen DOMDocument *doc = parser->getDocument(); //An dieser Stelle erzeugen wir die Infrastruktur, welche nötig ist um das XMI-File //wieder zu schreiben XMLCh tempStr[100]; XMLString::transcode("LS", tempStr, 99); DOMImplementation *impl = DOMImplementationRegistry::getDOMImplementation(tempStr); DOMWriter *theSerializer = ((DOMImplementationLS*)impl)->createDOMWriter(); //Hier können wir ein paar Eigenschaften des soeben erzeugten serializers einstellen if (theSerializer->canSetFeature(XMLUni::fgDOMWRTDiscardDefaultContent, true)){ theSerializer->setFeature(XMLUni::fgDOMWRTDiscardDefaultContent, true); } if (theSerializer->canSetFeature(XMLUni::fgDOMWRTFormatPrettyPrint, true)){ theSerializer->setFeature(XMLUni::fgDOMWRTFormatPrettyPrint, true); } // StdOutFormatTarget prints the resultant XML stream // to stdout once it receives any thing from the serializer. XMLFormatTarget *myFormatTarget = new StdOutFormatTarget(); theSerializer->writeNode(myFormatTarget, *doc);Insbesondere der Aufruf von
theSerializer->writeNode(myFormatTarget, *doc);ist hierbei wichtig. Wenn ich mir den pointer 'doc' der nichts anderes ist als ein DOMDocument über den aufruf einer hier verwendeten Bibliothek besorge:
Umllib umllib(argv[1]); Model model = umllib.getUMLModel(); //An dieser Stelle besorgen wir uns die RepositoryFactory... TodayApi::RepositoryFactory *rep = umllib.getRepository(); //An dieser Stelle besorge ich mir den Pointer auf das DOMDocument das ich mir //lediglich in einer Bibliothek durch einen Äquivalenten Aufruf der Form //DOMDocument *doc = parser->getDocument(); hole DOMDocument *doc = rep->returnDocumentPointer();Bricht das Programm während der Laufzeit mit der Meldung pure virtual method called ab. Vielleicht hat ja jmd. eine Idee... ich hänge da jedenfalls schon ein wenig länger vor....