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


Anmelden zum Antworten