<?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[in Bibliothek erstelltes Objekt weiterverwenden]]></title><description><![CDATA[<p>Hallo *,</p>
<p>ich moechte waehrend eines Bibliothekaufrufs ein Objekt von TestClass erstellen dass von einer anderen Bibliothekfunktion genutzt werden soll:</p>
<p>Mein Testprogramm sieht so aus:</p>
<pre><code class="language-cpp">#include &quot;interface.h&quot;

int main ()
{
    generateObj (); // Bibliotheksfunktion
    useObj (); // Bibliotheksfunktion
}
</code></pre>
<p>Das Interface zur Bibliothek:<br />
interface.h</p>
<pre><code class="language-cpp">class TestClass;
extern TestClass obj;

extern &quot;C&quot; {
void generateObj ();
void useObj ();
}
</code></pre>
<p>interface.cpp</p>
<pre><code class="language-cpp">void generateObj ()
{
    TestClass t_obj ();
}

void useObj ()
{
    t_obj.print ();
}
</code></pre>
<p>Die Bibliothek wird ohne Fehlermeldung uebersetzt und gelinkt. Das Testprogramm kann leider nicht gelinkt werden. Was mache ich falsch?</p>
<p>Eine andere Moeglichkeit waere ja das Objekt aus <em>generateObj()</em> zurueck zu geben. Da der aufrufende Code spaeter Fortran sein soll und ich nicht weiss wie ich in Fortran das Objekt speichern kann um es <em>useObj()</em> uebergeben zu koennen, habe ich die Moeglichkeit vorerst ausgeschlossen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/197175/in-bibliothek-erstelltes-objekt-weiterverwenden</link><generator>RSS for Node</generator><lastBuildDate>Thu, 01 Oct 2026 02:57:19 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/197175.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 07 Nov 2007 16:14:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to in Bibliothek erstelltes Objekt weiterverwenden on Wed, 07 Nov 2007 16:14:49 GMT]]></title><description><![CDATA[<p>Hallo *,</p>
<p>ich moechte waehrend eines Bibliothekaufrufs ein Objekt von TestClass erstellen dass von einer anderen Bibliothekfunktion genutzt werden soll:</p>
<p>Mein Testprogramm sieht so aus:</p>
<pre><code class="language-cpp">#include &quot;interface.h&quot;

int main ()
{
    generateObj (); // Bibliotheksfunktion
    useObj (); // Bibliotheksfunktion
}
</code></pre>
<p>Das Interface zur Bibliothek:<br />
interface.h</p>
<pre><code class="language-cpp">class TestClass;
extern TestClass obj;

extern &quot;C&quot; {
void generateObj ();
void useObj ();
}
</code></pre>
<p>interface.cpp</p>
<pre><code class="language-cpp">void generateObj ()
{
    TestClass t_obj ();
}

void useObj ()
{
    t_obj.print ();
}
</code></pre>
<p>Die Bibliothek wird ohne Fehlermeldung uebersetzt und gelinkt. Das Testprogramm kann leider nicht gelinkt werden. Was mache ich falsch?</p>
<p>Eine andere Moeglichkeit waere ja das Objekt aus <em>generateObj()</em> zurueck zu geben. Da der aufrufende Code spaeter Fortran sein soll und ich nicht weiss wie ich in Fortran das Objekt speichern kann um es <em>useObj()</em> uebergeben zu koennen, habe ich die Moeglichkeit vorerst ausgeschlossen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1399290</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1399290</guid><dc:creator><![CDATA[123_tom_dabei]]></dc:creator><pubDate>Wed, 07 Nov 2007 16:14:49 GMT</pubDate></item><item><title><![CDATA[Reply to in Bibliothek erstelltes Objekt weiterverwenden on Wed, 07 Nov 2007 17:26:26 GMT]]></title><description><![CDATA[<p>warum gibt dein generateObj dieses nicht einfach als Returnwert zurück?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1399331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1399331</guid><dc:creator><![CDATA[DocJunioR]]></dc:creator><pubDate>Wed, 07 Nov 2007 17:26:26 GMT</pubDate></item><item><title><![CDATA[Reply to in Bibliothek erstelltes Objekt weiterverwenden on Thu, 08 Nov 2007 07:52:46 GMT]]></title><description><![CDATA[<p>Wie geschrieben soll die Bibliothek aus Fortran heraus aufgerufen werden. Da ich nicht weiss ob (und wenn ja, wie) man in Fortran Objekte speichert, wollte ich ein statisches Objekt anlegen und meine Bibliotheksroutinen koennen das Objekt dann nutzen. Ich habe leider keine Ahnung ob das prinzipiell so moeglich ist wie ich mir das vorstelle.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1399557</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1399557</guid><dc:creator><![CDATA[123_tom_dabei]]></dc:creator><pubDate>Thu, 08 Nov 2007 07:52:46 GMT</pubDate></item><item><title><![CDATA[Reply to in Bibliothek erstelltes Objekt weiterverwenden on Thu, 08 Nov 2007 09:05:02 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>prinzipiell kannst Du das über eine globale Variable regeln.<br />
Wenn es einfach nur Objekt sind, die zum Programmstart schon abgelegt werden können, ist es einfach:</p>
<p>interface.cpp</p>
<pre><code class="language-cpp">TestClass globTestClass;

// generateObj() entfällt
void useObj () {
    globTestClass.print();
}
</code></pre>
<p>Wenn es erst zur Laufzeit erzeugt werden kann (z.B. weil es von Inputparametern abhängig ist, die erst zur Laufzeit feststehen), musst Du das globale Objekt dynamsich erzeugen:</p>
<p>interface.cpp</p>
<pre><code class="language-cpp">TestClass* globTestClass = 0;

void generateObj ()
{
    if(!globTestClass) globTestClass = new TestClass();
}

void useObj ()
{
    if(globTestClass) globTestClass-&gt;print();
}
</code></pre>
<p>Da musst Du Dir aber noch eine Menge Anderer Gedanken machen, z.B. was passieren soll, wenn mehrere Objekte angelegt werden wollen.<br />
Das Abräumen sollte man auch nicht vergessen ... das kannst Du evtl. über eine eigene Verwaltungsklasse machen:</p>
<pre><code class="language-cpp">struct Abraeumer {
   TestClass* &amp;raeumMichAb;
   Abraeumer(TestClass* &amp;p) : raeumMichAb(p) {}
   ~Abraeumer() { delete raeumMichAb; }
};

TestClass* globTestClass = 0;
Abraeumer abraeumer(globTestClass);
</code></pre>
<p>... smart-Pointer gehen natürlich auch.<br />
Wichtig wird das vA, wenn Deine Testclass einen &quot;echten&quot; Destruktor hat (also z.B. Ressourcen freigibt, die das OS nicht automatisch bei Prozessende wieder freigibt, oder irgendwelche anderen &quot;Abschlussaufgaben&quot; erledigt, ...)<br />
Außerdem kann es noch beliebig kompliziert werden, wenn man mit mehreren (beliebig vielen ?) Objekten arbeiten will, Multithreading braucht, die Objekte untereinander abhängig sind, ....</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1399572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1399572</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 08 Nov 2007 09:05:02 GMT</pubDate></item></channel></rss>