<?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[Typ der Variable erst zur Laufzeit zuweisen?]]></title><description><![CDATA[<p>Ich habe folgendes Problem: Ich möchte ein Gerät (LockIn)ansteuern und nenne dies mal m_LockIn. Jetzt habe ich aber zwei verschiedene Geräte sagen wir A und B.</p>
<p>Jetzt wähle ich zur Laufzeit aus ob ich A oder B nehmen möchte. Jetzt brauche ich ein</p>
<pre><code class="language-cpp">Lockin = new GeraetA
</code></pre>
<p>das funktionert aber auch nur wenn ich Lockin als</p>
<pre><code class="language-cpp">GeraetA Lockin
</code></pre>
<p>definiert habe.</p>
<p>Wie mache ich das dann so dass LockIn sowohl den Type GeraetA als auch GeraetB haben kann?</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/190812/typ-der-variable-erst-zur-laufzeit-zuweisen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 19:45:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/190812.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 27 Aug 2007 11:11:51 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Typ der Variable erst zur Laufzeit zuweisen? on Mon, 27 Aug 2007 11:11:51 GMT]]></title><description><![CDATA[<p>Ich habe folgendes Problem: Ich möchte ein Gerät (LockIn)ansteuern und nenne dies mal m_LockIn. Jetzt habe ich aber zwei verschiedene Geräte sagen wir A und B.</p>
<p>Jetzt wähle ich zur Laufzeit aus ob ich A oder B nehmen möchte. Jetzt brauche ich ein</p>
<pre><code class="language-cpp">Lockin = new GeraetA
</code></pre>
<p>das funktionert aber auch nur wenn ich Lockin als</p>
<pre><code class="language-cpp">GeraetA Lockin
</code></pre>
<p>definiert habe.</p>
<p>Wie mache ich das dann so dass LockIn sowohl den Type GeraetA als auch GeraetB haben kann?</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1352895</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1352895</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Mon, 27 Aug 2007 11:11:51 GMT</pubDate></item><item><title><![CDATA[Reply to Typ der Variable erst zur Laufzeit zuweisen? on Mon, 27 Aug 2007 11:13:11 GMT]]></title><description><![CDATA[<p>Basisklasse erstellen und von dieser ableiten. Dann kannst Du in den Basiszeiger A und B stecken</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1352896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1352896</guid><dc:creator><![CDATA[Knuddlbaer]]></dc:creator><pubDate>Mon, 27 Aug 2007 11:13:11 GMT</pubDate></item><item><title><![CDATA[Reply to Typ der Variable erst zur Laufzeit zuweisen? on Mon, 27 Aug 2007 11:17:39 GMT]]></title><description><![CDATA[<p>Knuddlbaer schrieb:</p>
<blockquote>
<p>Basisklasse erstellen und von dieser ableiten. Dann kannst Du in den Basiszeiger A und B stecken</p>
</blockquote>
<p>Mir fehlt gerade die Intuition was du meinst. Ich müsste ja im Konstruktor die abgeleitete Klasse ändern, oder was meinst du genau?</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1352901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1352901</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Mon, 27 Aug 2007 11:17:39 GMT</pubDate></item><item><title><![CDATA[Reply to Typ der Variable erst zur Laufzeit zuweisen? on Mon, 27 Aug 2007 11:18:56 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class Base{

};

class Typ1 : public Base{

};

class Typ2 : public Base{

};

Base *pVariant;
</code></pre>
<p>Irgendwann zur laufzeit:</p>
<pre><code class="language-cpp">pVariant = new Typ1;
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">pVariant = new Typ2;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1352903</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1352903</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Mon, 27 Aug 2007 11:18:56 GMT</pubDate></item><item><title><![CDATA[Reply to Typ der Variable erst zur Laufzeit zuweisen? on Mon, 27 Aug 2007 11:40:01 GMT]]></title><description><![CDATA[<p>Dazu aber noch virtuelle Funktionen :):</p>
<pre><code class="language-cpp">class Base{
    virtual void DoSomething()
    {
        cout &lt;&lt; &quot;Ich bin die Basis-Klasse&quot; &lt;&lt; endl;
    }
};

class Typ1 : public Base{
    virtual void DoSomething()
    {
        cout &lt;&lt; &quot;Ich bin Typ 1&quot; &lt;&lt; endl;
    }
};

class Typ2 : public Base{
    virtual void DoSomething()
    {
        cout &lt;&lt; &quot;Ich bin Typ 2&quot; &lt;&lt; endl;
    }
};

Base *pVariant;
if ( bla )
    pVariant = new Typ1();
else
    pVariant = new Typ2();
pVariant-&gt;DoSomething();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1352924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1352924</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Mon, 27 Aug 2007 11:40:01 GMT</pubDate></item><item><title><![CDATA[Reply to Typ der Variable erst zur Laufzeit zuweisen? on Mon, 27 Aug 2007 11:54:36 GMT]]></title><description><![CDATA[<p>Wofür die virtuellen Funktionen? Beide Geräte haben nicht vollständig identische Funktionen.</p>
<p>Ich habe Klassen der Geräte die ich aber eigentlich nicht ändern möchte. Geht dann auch folgendes?</p>
<pre><code class="language-cpp">#include &quot;GPIBDevices.h&quot;

class CLockIn
{
public:
	CLockIn(void);
	~CLockIn(void);
	bool Connected;
};

class LockInSRS : public CLockIn, public GPIB_SRSLockIn
{
};

class LockInSRSRF : public CLockIn, public GPIB_SRSRFLockIn
{
};
</code></pre>
<p>Ich bekomme dann mit folgendem Code</p>
<pre><code class="language-cpp">if (theApp.Settings.lockin.getLockInType() == RF) {
		theApp.LockIn = new LockInSRSRF;
	}
	else if (theApp.Settings.lockin.getLockInType() == LF) {
		theApp.LockIn = new LockInSRS;
	}
	int board = theApp.Settings.lockin.getBoard();
	int address = theApp.Settings.lockin.getAddress();	
	BOOL result = theApp.LockIn-&gt;CreateLockIn(board, address);
</code></pre>
<p>den Fehler</p>
<blockquote>
<p>error C2039: 'CreateLockIn': Ist kein Element von 'CLockIn'</p>
</blockquote>
<p>Warum nicht ?</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1352937</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1352937</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Mon, 27 Aug 2007 11:54:36 GMT</pubDate></item><item><title><![CDATA[Reply to Typ der Variable erst zur Laufzeit zuweisen? on Mon, 27 Aug 2007 11:56:17 GMT]]></title><description><![CDATA[<p>Genau für sowas würdest du virtuelle Methoden benötigen - du hast ein gemeinsames Interface für unterschiedliche Klassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1352949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1352949</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 27 Aug 2007 11:56:17 GMT</pubDate></item><item><title><![CDATA[Reply to Typ der Variable erst zur Laufzeit zuweisen? on Mon, 27 Aug 2007 11:59:27 GMT]]></title><description><![CDATA[<p>pospiech schrieb:</p>
<blockquote>
<p>Wofür die virtuellen Funktionen? Beide Geräte haben nicht vollständig identische Funktionen.</p>
</blockquote>
<p>Das ist auch in Ordnung, aber wenn der Typ zur Kompilier-Zeit nicht feststeht und du es über Vererbung löst, kannst du nur dir Schnittmenge der Funktionen nutzen. Ansonsten musst du die Typinformationen bewahren und mit if's rumhantieren.</p>
<p>pospiech schrieb:</p>
<blockquote>
<p>error C2039: 'CreateLockIn': Ist kein Element von 'CLockIn'</p>
</blockquote>
<p>Ist halt nicht in der Klasse 'CLockIn' deklariert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1352954</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1352954</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Mon, 27 Aug 2007 11:59:27 GMT</pubDate></item><item><title><![CDATA[Reply to Typ der Variable erst zur Laufzeit zuweisen? on Mon, 27 Aug 2007 12:02:57 GMT]]></title><description><![CDATA[<blockquote>
<p>Wofür die virtuellen Funktionen? Beide Geräte haben nicht vollständig identische Funktionen.</p>
</blockquote>
<p>Fragen wir anderst:</p>
<p>Wenn beide Geräte nicht identisch sind, wie möchtest Du diese später unterscheiden ? In Deiner Variablen kann ja A oder B stehen. IRgendeine Idee hast Du da ja sicherlich schon gehabt bevor Du auf die Idee gekommen bist A ODER B in ne Variable zu stecken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1352958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1352958</guid><dc:creator><![CDATA[Knuddlbaer]]></dc:creator><pubDate>Mon, 27 Aug 2007 12:02:57 GMT</pubDate></item><item><title><![CDATA[Reply to Typ der Variable erst zur Laufzeit zuweisen? on Mon, 27 Aug 2007 12:05:11 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>pospiech schrieb:</p>
<blockquote>
<p>Wofür die virtuellen Funktionen? Beide Geräte haben nicht vollständig identische Funktionen.</p>
</blockquote>
<p>Das ist auch in Ordnung, aber wenn der Typ zur Kompilier-Zeit nicht feststeht und du es über Vererbung löst, kannst du nur dir Schnittmenge der Funktionen nutzen. Ansonsten musst du die Typinformationen bewahren und mit if's rumhantieren.</p>
</blockquote>
<p>Das heißt das was ich wollte geht nicht bzw nur dann wenn ich für alles virtuelle Funktionen definiere?</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1352962</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1352962</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Mon, 27 Aug 2007 12:05:11 GMT</pubDate></item><item><title><![CDATA[Reply to Typ der Variable erst zur Laufzeit zuweisen? on Mon, 27 Aug 2007 12:08:35 GMT]]></title><description><![CDATA[<p>beschreib doch erstmal genau was du willst <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>e: oder willst du einfach die (überschriebenen?) Funktionen aus &quot;CLockIn&quot; dynamisch entweder in TypA oder TypB benutzen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1352966</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1352966</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Mon, 27 Aug 2007 12:08:35 GMT</pubDate></item><item><title><![CDATA[Reply to Typ der Variable erst zur Laufzeit zuweisen? on Mon, 27 Aug 2007 12:13:42 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>beschreib doch erstmal genau was du willst <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>e: oder willst du einfach die (überschriebenen?) Funktionen aus &quot;CLockIn&quot; dynamisch entweder in TypA oder TypB benutzen?</p>
</blockquote>
<p>Eigentlich möchte ich das eine variable beliebige Klassen annehmen kann. Das konzept einer dritte Klasse mit virtuellen Funktionen verstehe ich, ist mir aber im Moment zu aufwendig. Da ist es erstmal einfacher zwischen zwei Variablen mit ifs zu unterscheiden.</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1352970</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1352970</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Mon, 27 Aug 2007 12:13:42 GMT</pubDate></item><item><title><![CDATA[Reply to Typ der Variable erst zur Laufzeit zuweisen? on Mon, 27 Aug 2007 12:18:14 GMT]]></title><description><![CDATA[<p>Naja, wenn die Variable einen beliebigen Typ aufnimmt, woher willst Du denn dann wissen was in der variable stekct und wie es zu verwenden ist ?</p>
<p>Ich kann zwar nen Kaffee und nen Toast schwarz Servieren, aber die Geräte sind dazu schon unterschiedlich zu verwenden ;o)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1352975</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1352975</guid><dc:creator><![CDATA[Knuddlbaer]]></dc:creator><pubDate>Mon, 27 Aug 2007 12:18:14 GMT</pubDate></item><item><title><![CDATA[Reply to Typ der Variable erst zur Laufzeit zuweisen? on Mon, 27 Aug 2007 13:46:02 GMT]]></title><description><![CDATA[<p>Also willst du quasi sowas?:</p>
<pre><code class="language-cpp">class Katze
{
    void fauchen();
};

class Hochhaus
{
    int baueStockwerk( int hoehe, int stahltraeger );
};

variable v;
if ( bla )
    v = new Natze();
else
    v = new Hochhaus();

...

if ( v is Katze )
    v.fauchen();
else if ( v is Hochhaus )
    v.baueStockwerk( 7, 189 );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1353059</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353059</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Mon, 27 Aug 2007 13:46:02 GMT</pubDate></item><item><title><![CDATA[Reply to Typ der Variable erst zur Laufzeit zuweisen? on Mon, 27 Aug 2007 13:55:13 GMT]]></title><description><![CDATA[<p>Ja das war meine ursprüngliche Idee.</p>
<p>Matthias</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353064</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353064</guid><dc:creator><![CDATA[pospiech]]></dc:creator><pubDate>Mon, 27 Aug 2007 13:55:13 GMT</pubDate></item><item><title><![CDATA[Reply to Typ der Variable erst zur Laufzeit zuweisen? on Mon, 27 Aug 2007 15:37:03 GMT]]></title><description><![CDATA[<p>Da musst du hässlicherweise mit einem Zeiger auf void arbeiten.<br />
Beispiel:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;ctime&gt;
using namespace std;

class Katze
{
public:
	void sagMiau()
	{
		cout &lt;&lt; &quot;Miau\n&quot;;
	}
};

class Hochhaus
{
public:
	void baueStockwerk(int hoehe)
	{
		cout &lt;&lt; &quot;Stockwerk der Hoehe &quot;&lt;&lt; hoehe &lt;&lt; &quot; gebaut\n&quot;;
	}
};

namespace wirrwarr
{
	void *was_auch_immer;
	bool ist_katze;
}

void kockolores()
{
	if (wirrwarr::ist_katze)
	{
		Katze *k = static_cast&lt;Katze *&gt;(wirrwarr::was_auch_immer);
		k-&gt;sagMiau();
	}
	else
	{
		Hochhaus *h = static_cast&lt;Hochhaus *&gt;(wirrwarr::was_auch_immer);
		h-&gt;baueStockwerk(12);
	}
}

int main()
{
	srand(time(0));
	wirrwarr::ist_katze = (rand()%2 == 0);

	if (wirrwarr::ist_katze)
		wirrwarr::was_auch_immer = new Katze;
	else
		wirrwarr::was_auch_immer = new Hochhaus;

	kockolores();
}
</code></pre>
<p>Du solltest aber auf jeden Fall über eine Klassenhierarchie nachdenken. Bei Unterklassen ist übrigens ein virtueller Destruktor wichtig, falls Objekte dieser Klassen über einen Basisklassenzeiger vom Heap gelöscht werden sollen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353137</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353137</guid><dc:creator><![CDATA[void *]]></dc:creator><pubDate>Mon, 27 Aug 2007 15:37:03 GMT</pubDate></item><item><title><![CDATA[Reply to Typ der Variable erst zur Laufzeit zuweisen? on Mon, 27 Aug 2007 15:47:36 GMT]]></title><description><![CDATA[<p>void * schrieb:</p>
<blockquote>
<p>Bei Unterklassen ist übrigens ein virtueller Destruktor wichtig ...</p>
</blockquote>
<p>Der virtuelle Destruktor muss natürlich für die Basisklasse definiert sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353149</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353149</guid><dc:creator><![CDATA[void *]]></dc:creator><pubDate>Mon, 27 Aug 2007 15:47:36 GMT</pubDate></item><item><title><![CDATA[Reply to Typ der Variable erst zur Laufzeit zuweisen? on Mon, 27 Aug 2007 20:48:20 GMT]]></title><description><![CDATA[<p>pospiech schrieb:</p>
<blockquote>
<p>Ja das war meine ursprüngliche Idee.</p>
<p>Matthias</p>
</blockquote>
<p>Dann war das eine schlechte Idee !! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
&quot;Wer&quot; (also welche Funktion, welches Objekt, ....) soll denn etwas mit einem &quot;Ding&quot; anfangen können, dass &quot;alles und nichts&quot; kann ?</p>
<p>Sorry, aber das sieht mir nach &quot;Ich habe keine Lust, mir jetzt Gedanken zu machen und hoffe, das mit Flexibilisierung auf später verschieben zu können&quot; aus. (no offense)</p>
<p>Wenn Du zwei Objekte hast, die NICHTS miteinander zu tun haben, dann gibt es auch keine sinnvolle Funktion, die Du mit dem Einen wie mit dem Anderen aufrufen kannst.<br />
WENN sie aber doch etwas Gemeinsames haben, kommt man dem mit virtuellen Funktionen meist ganz gut bei (vielleicht nicht immer, aber ich behaupte mal, dass Anfänger nie ein derartiges Szenario haben).</p>
<p>Also mein Tipp: Trenne die Dinge entweder ganz oder verbinde sie sinnvoll, dann bringt Dein Programm auch was. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353347</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353347</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 27 Aug 2007 20:48:20 GMT</pubDate></item><item><title><![CDATA[Reply to Typ der Variable erst zur Laufzeit zuweisen? on Tue, 28 Aug 2007 04:23:10 GMT]]></title><description><![CDATA[<p>naja ich glaub (wenn ich mir die Bezeichnung der Klassen anschaue) haben die klassen die er über die selber variable verwalten will schon gemeinsamkeiten haben... ich denke mal das er nich ganz verstanden hat was wir wollen bzw. was es mit virtuellen funktionen mit verwanden klassen auf sich hat...</p>
<p>Erklär doch mal was die Klassen &quot;lockxxxx&quot; machen, und welche gemeinsamkeiten sie haben....</p>
<p>Grüße</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353437</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353437</guid><dc:creator><![CDATA[BorisDieKlinge]]></dc:creator><pubDate>Tue, 28 Aug 2007 04:23:10 GMT</pubDate></item></channel></rss>