<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[pure virtual method called tieferes Verständnis]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>mein Problem ist der Aufruf einer Funktion mit dem darauf folgenden Abbruch durch die Fehlermeldung 'pure virtual method called'</p>
<p>Der folgende Code funktioniert einwandfrei:</p>
<pre><code class="language-cpp">XMLPlatformUtils::Initialize();

	//An dieser Stelle einen Parser erstellen dem wir im folgenden ein File übergeben.
	XercesDOMParser *parser = new XercesDOMParser;
	parser-&gt;setValidationScheme(XercesDOMParser::Val_Auto);
	parser-&gt;setDoNamespaces(false);
	parser-&gt;setDoSchema(false);
	parser-&gt;setValidationSchemaFullChecking(false);
	parser-&gt;setCreateEntityReferenceNodes(false);

	//Das XMI-File durch den Parser einlesen
	parser-&gt;parse(argv[1]);  

	//Die Repräsentation des Modells holen
	DOMDocument *doc = parser-&gt;getDocument();

        //An dieser Stelle erzeugen wir die Infrastruktur, welche nötig ist um das XMI-File 
	//wieder zu schreiben
	XMLCh tempStr[100];
	XMLString::transcode(&quot;LS&quot;, tempStr, 99);
	DOMImplementation *impl = DOMImplementationRegistry::getDOMImplementation(tempStr);
	DOMWriter *theSerializer = ((DOMImplementationLS*)impl)-&gt;createDOMWriter();

	//Hier können wir ein paar Eigenschaften des soeben erzeugten serializers einstellen
	if (theSerializer-&gt;canSetFeature(XMLUni::fgDOMWRTDiscardDefaultContent, true)){
		theSerializer-&gt;setFeature(XMLUni::fgDOMWRTDiscardDefaultContent, true);
	}  

        if (theSerializer-&gt;canSetFeature(XMLUni::fgDOMWRTFormatPrettyPrint, true)){
		theSerializer-&gt;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-&gt;writeNode(myFormatTarget, *doc);
</code></pre>
<p>Insbesondere der Aufruf von</p>
<pre><code class="language-cpp">theSerializer-&gt;writeNode(myFormatTarget, *doc);
</code></pre>
<p>ist hierbei wichtig. Wenn ich mir den pointer 'doc' der nichts anderes ist als ein DOMDocument über den aufruf einer hier verwendeten Bibliothek besorge:</p>
<pre><code class="language-cpp">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-&gt;getDocument(); hole
    DOMDocument *doc = rep-&gt;returnDocumentPointer();
</code></pre>
<p>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....</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/138956/pure-virtual-method-called-tieferes-verständnis</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 07:15:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/138956.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 02 Mar 2006 14:36:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to pure virtual method called tieferes Verständnis on Thu, 02 Mar 2006 14:36:19 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>mein Problem ist der Aufruf einer Funktion mit dem darauf folgenden Abbruch durch die Fehlermeldung 'pure virtual method called'</p>
<p>Der folgende Code funktioniert einwandfrei:</p>
<pre><code class="language-cpp">XMLPlatformUtils::Initialize();

	//An dieser Stelle einen Parser erstellen dem wir im folgenden ein File übergeben.
	XercesDOMParser *parser = new XercesDOMParser;
	parser-&gt;setValidationScheme(XercesDOMParser::Val_Auto);
	parser-&gt;setDoNamespaces(false);
	parser-&gt;setDoSchema(false);
	parser-&gt;setValidationSchemaFullChecking(false);
	parser-&gt;setCreateEntityReferenceNodes(false);

	//Das XMI-File durch den Parser einlesen
	parser-&gt;parse(argv[1]);  

	//Die Repräsentation des Modells holen
	DOMDocument *doc = parser-&gt;getDocument();

        //An dieser Stelle erzeugen wir die Infrastruktur, welche nötig ist um das XMI-File 
	//wieder zu schreiben
	XMLCh tempStr[100];
	XMLString::transcode(&quot;LS&quot;, tempStr, 99);
	DOMImplementation *impl = DOMImplementationRegistry::getDOMImplementation(tempStr);
	DOMWriter *theSerializer = ((DOMImplementationLS*)impl)-&gt;createDOMWriter();

	//Hier können wir ein paar Eigenschaften des soeben erzeugten serializers einstellen
	if (theSerializer-&gt;canSetFeature(XMLUni::fgDOMWRTDiscardDefaultContent, true)){
		theSerializer-&gt;setFeature(XMLUni::fgDOMWRTDiscardDefaultContent, true);
	}  

        if (theSerializer-&gt;canSetFeature(XMLUni::fgDOMWRTFormatPrettyPrint, true)){
		theSerializer-&gt;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-&gt;writeNode(myFormatTarget, *doc);
</code></pre>
<p>Insbesondere der Aufruf von</p>
<pre><code class="language-cpp">theSerializer-&gt;writeNode(myFormatTarget, *doc);
</code></pre>
<p>ist hierbei wichtig. Wenn ich mir den pointer 'doc' der nichts anderes ist als ein DOMDocument über den aufruf einer hier verwendeten Bibliothek besorge:</p>
<pre><code class="language-cpp">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-&gt;getDocument(); hole
    DOMDocument *doc = rep-&gt;returnDocumentPointer();
</code></pre>
<p>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....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1006873</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1006873</guid><dc:creator><![CDATA[langeFrage]]></dc:creator><pubDate>Thu, 02 Mar 2006 14:36:19 GMT</pubDate></item></channel></rss>