<?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[Von einer Klasse, auf eine Funktion einer anderen Klasse zugreifen]]></title><description><![CDATA[<p>Hi,</p>
<p>ich weis das die Frage schon mehrfach gestellt wurde, aber leider waren die Antworten für mich nicht ausreichend. Ich bin doch noch Einsteiger, aber sehr Lerngierig.</p>
<p>Wie ich z.B auf eine Funktion aus meiner AppKlasse zugreife, habe ich mittlerweile rausgefunden. Mit</p>
<pre><code class="language-cpp">CMyApp* pApp = ((CMyApp*) AfxGetApp()); 
    pApp-&gt;OnFileNew();
</code></pre>
<p>kann ich auf jede Funktion aus meiner AppKlasse zugreifen.</p>
<p>Jetzt habe ich aber folgendes Beispiel.</p>
<p>In meiner zweiten Klasse habe ich diese Funktion</p>
<pre><code class="language-cpp">void CzweiterDlg::OnButton2() 
{
      m_List.DeleteAllItems();  	

      CStdioFile myFile(&quot;data.dat&quot;, CFile::modeReadWrite); 
      CString str = &quot;&quot;;       

      while(myFile.ReadString(str))//das File wird zeilenweise Ausgelesen 
      { 
	  m_List.InsertItem(0, str,0);
      } 
      myFile.Close();  
}
</code></pre>
<p>Jetzt möchte ich von meiner ersten Klasse auf die Funktion <strong>OnButton2</strong> zugreifen. Dafür habe ich im Header der ersten Klasse, die zweite Klasse includiert.</p>
<p>Nun versuche ich wirklich seit mehreren Tagen, von der Klasse1 auf die Funktion <strong>OnButton2</strong> aus meiner zweiten Klasse zuzugreifen.<br />
Ich habe etwas über Pointer gelesen, aber kein ausführliches Beispiel gefunden.</p>
<p>Wenn ich es mit</p>
<pre><code class="language-cpp">CzweiterDlg* pDlg = ((CzweiterDlg*) AfxGetApp()); 
    pDlg-&gt;OnButton2();
</code></pre>
<p>Versuche, passiert nichts.</p>
<p>Wo ist mein Denkfehler?</p>
<p>Vielen Dank für eure Hilfe</p>
<p>asmodia</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/77653/von-einer-klasse-auf-eine-funktion-einer-anderen-klasse-zugreifen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Apr 2026 08:32:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/77653.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 23 Jun 2004 07:44:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Von einer Klasse, auf eine Funktion einer anderen Klasse zugreifen on Wed, 23 Jun 2004 07:44:19 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich weis das die Frage schon mehrfach gestellt wurde, aber leider waren die Antworten für mich nicht ausreichend. Ich bin doch noch Einsteiger, aber sehr Lerngierig.</p>
<p>Wie ich z.B auf eine Funktion aus meiner AppKlasse zugreife, habe ich mittlerweile rausgefunden. Mit</p>
<pre><code class="language-cpp">CMyApp* pApp = ((CMyApp*) AfxGetApp()); 
    pApp-&gt;OnFileNew();
</code></pre>
<p>kann ich auf jede Funktion aus meiner AppKlasse zugreifen.</p>
<p>Jetzt habe ich aber folgendes Beispiel.</p>
<p>In meiner zweiten Klasse habe ich diese Funktion</p>
<pre><code class="language-cpp">void CzweiterDlg::OnButton2() 
{
      m_List.DeleteAllItems();  	

      CStdioFile myFile(&quot;data.dat&quot;, CFile::modeReadWrite); 
      CString str = &quot;&quot;;       

      while(myFile.ReadString(str))//das File wird zeilenweise Ausgelesen 
      { 
	  m_List.InsertItem(0, str,0);
      } 
      myFile.Close();  
}
</code></pre>
<p>Jetzt möchte ich von meiner ersten Klasse auf die Funktion <strong>OnButton2</strong> zugreifen. Dafür habe ich im Header der ersten Klasse, die zweite Klasse includiert.</p>
<p>Nun versuche ich wirklich seit mehreren Tagen, von der Klasse1 auf die Funktion <strong>OnButton2</strong> aus meiner zweiten Klasse zuzugreifen.<br />
Ich habe etwas über Pointer gelesen, aber kein ausführliches Beispiel gefunden.</p>
<p>Wenn ich es mit</p>
<pre><code class="language-cpp">CzweiterDlg* pDlg = ((CzweiterDlg*) AfxGetApp()); 
    pDlg-&gt;OnButton2();
</code></pre>
<p>Versuche, passiert nichts.</p>
<p>Wo ist mein Denkfehler?</p>
<p>Vielen Dank für eure Hilfe</p>
<p>asmodia</p>
]]></description><link>https://www.c-plusplus.net/forum/post/546251</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/546251</guid><dc:creator><![CDATA[asmodia]]></dc:creator><pubDate>Wed, 23 Jun 2004 07:44:19 GMT</pubDate></item><item><title><![CDATA[Reply to Von einer Klasse, auf eine Funktion einer anderen Klasse zugreifen on Wed, 23 Jun 2004 08:11:52 GMT]]></title><description><![CDATA[<blockquote>
<p>CzweiterDlg* pDlg = ((CzweiterDlg*) AfxGetApp());<br />
pDlg-&gt;OnButton2();</p>
</blockquote>
<p>CzweiterDlg ist nicht deine App klasse.</p>
<p>kleines bsp wie man so was machen kann:</p>
<pre><code class="language-cpp">class Foo1  // klasse 1
{
   Foo2 *m_pFoo2;  // das ist der pointer auf deine 2 klasse
public:
   Foo1()
   :pFoo2(NULL)  // init nicht vergessen
   {
   }

   void SetFoo2Ptr(Foo2 *ptr)
   {
       m_pFoo2 = ptr; // merke dir den pointer
   }

   void OnIgrendwas()
   {
      ASSERT(m_pFoo2!=NULL);  // lass es im debuger knallen falls du mal das
                              // SetFoo2Ptr vergessen hast
      if(m_pFoo2)
      {
         m_pFoo2-&gt;OnIrgenwas();  // rufe die methode von klasse 2 auf
      }
   }
}

class Foo2  // klasse 2
{
public:
   void OnIgrendwas()
   {
     ...
   }
}

void doit()
{
   Foo1 foo1;  // klasse 1
   Foo2 foo2;  // klasse 2
   foo1.SetFoo2Ptr(&amp;foo2);  // setzte dan pointer auf klasse 2 in kasse 1
   foo1.OnIrgendwas(); // macht jetzt das was  du haben willst
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/546269</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/546269</guid><dc:creator><![CDATA[CMatt]]></dc:creator><pubDate>Wed, 23 Jun 2004 08:11:52 GMT</pubDate></item><item><title><![CDATA[Reply to Von einer Klasse, auf eine Funktion einer anderen Klasse zugreifen on Wed, 23 Jun 2004 09:12:28 GMT]]></title><description><![CDATA[<p>Danke CMatt vielen Dank <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Jetzt bringst du Licht ins Dunkel.</p>
<p>Ich hoffe ich verstehe das jetzt richtig,</p>
<pre><code class="language-cpp">class Foo1  // klasse 1 
{ 
   Foo2 *m_pFoo2;  // das ist der pointer auf deine 2 klasse 
public: 
   Foo1() 
   :pFoo2(NULL)  // init nicht vergessen 
   { 
   }
</code></pre>
<p>packe ich in den Header der Klasse1 !? und</p>
<pre><code class="language-cpp">void SetFoo2Ptr(Foo2 *ptr)
   {
       m_pFoo2 = ptr; // merke dir den pointer
   }

   void OnIgrendwas()
   {
      ASSERT(m_pFoo2!=NULL);  // lass es im debuger knallen falls du mal das
                              // SetFoo2Ptr vergessen hast
      if(m_pFoo2)
      {
         m_pFoo2-&gt;OnIrgenwas();  // rufe die methode von klasse 2 auf
      }
}
</code></pre>
<p>packe ich in die Klasse1!?</p>
<p>Im Header der Klasse 2 mache ich die Funktion OnIgrendwas() public!</p>
<p>soweit habe ich das glaube ich verstanden... bitte korrigiere mich wenn nicht.</p>
<p>Nur wo kommt</p>
<pre><code class="language-cpp">void doit()
{
   Foo1 foo1;  // klasse 1
   Foo2 foo2;  // klasse 2
   foo1.SetFoo2Ptr(&amp;foo2);  // setzte dan pointer auf klasse 2 in kasse 1
   foo1.OnIrgendwas(); // macht jetzt das was  du haben willst
}
</code></pre>
<p>hin? und wo mache ich <strong>doit()</strong> bekannt??</p>
<p>In der Klasse1 muss ich doch noch den Header der Klasse 2 einbinden!?</p>
<p>Danke für deine Mühe!</p>
<p>asmodia</p>
]]></description><link>https://www.c-plusplus.net/forum/post/546313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/546313</guid><dc:creator><![CDATA[asmodia]]></dc:creator><pubDate>Wed, 23 Jun 2004 09:12:28 GMT</pubDate></item><item><title><![CDATA[Reply to Von einer Klasse, auf eine Funktion einer anderen Klasse zugreifen on Wed, 23 Jun 2004 09:12:05 GMT]]></title><description><![CDATA[<p>kommt ganz drauf an.<br />
wo wird den CzweiterDlg erzeugt? in CersterDlg?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/546315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/546315</guid><dc:creator><![CDATA[CMatt]]></dc:creator><pubDate>Wed, 23 Jun 2004 09:12:05 GMT</pubDate></item><item><title><![CDATA[Reply to Von einer Klasse, auf eine Funktion einer anderen Klasse zugreifen on Wed, 23 Jun 2004 09:17:41 GMT]]></title><description><![CDATA[<p>ja. Ich erzeuge Ihn so</p>
<pre><code class="language-cpp">CForm2Dlg* pForm2Dlg; 
    pForm2Dlg = new CForm2Dlg(); 
    pForm2Dlg-&gt;Create(IDD_FORM2,this);
    pForm2Dlg-&gt;ShowWindow(SW_SHOWMAXIMIZED); 
	pForm2Dlg-&gt;SetDlgItemText(IDC_BLA1 , m_strBla1 );
	pForm2Dlg-&gt;SetDlgItemText(IDC_BLA2 , m_strBla2 );
</code></pre>
<p>asmodia</p>
]]></description><link>https://www.c-plusplus.net/forum/post/546319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/546319</guid><dc:creator><![CDATA[asmodia]]></dc:creator><pubDate>Wed, 23 Jun 2004 09:17:41 GMT</pubDate></item><item><title><![CDATA[Reply to Von einer Klasse, auf eine Funktion einer anderen Klasse zugreifen on Wed, 23 Jun 2004 09:25:16 GMT]]></title><description><![CDATA[<p>dann ist es doch ganz einfach..</p>
<pre><code class="language-cpp">CForm1Dlg::func()
{
   CForm2Dlg* pForm2Dlg; 
   pForm2Dlg = new CForm2Dlg(); 
   pForm2Dlg-&gt;SetForm1Ptr(this); // &lt;=== setzt den pointer auf klasse 1
   pForm2Dlg-&gt;Create(IDD_FORM2,this);
   pForm2Dlg-&gt;ShowWindow(SW_SHOWMAXIMIZED); 
   pForm2Dlg-&gt;SetDlgItemText(IDC_BLA1 , m_strBla1 );
   pForm2Dlg-&gt;SetDlgItemText(IDC_BLA2 , m_strBla2 );
}
</code></pre>
<p>was dann nach fehlt ist ein</p>
<pre><code class="language-cpp">#inlcude &quot;Form1Dlg.h&quot;
</code></pre>
<p>in der Form2Dlg.cpp</p>
<p>und ein</p>
<pre><code class="language-cpp">class CForm1Dlg; // wenn du in CForm2Dlg, CForm1Dlg* deklalierst, muss der compiler wissen was das ist
...
class CForm2Dlg {
...
</code></pre>
<p>noch ne anmerkung zu deinem code oben:</p>
<blockquote>
<p>CForm2Dlg* pForm2Dlg;<br />
pForm2Dlg = new CForm2Dlg();</p>
</blockquote>
<p>pForm2Dlg ist eine lokale varaible. Du machst ein new, allokierst also dynmisch speicher. Der code läuft weiter bis zum Funktionsende und springt raus. Wer gibt den speicher jetzt wieder frei? Keiner mehr, da niemand mehr den pointer kennt <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="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/546325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/546325</guid><dc:creator><![CDATA[CMatt]]></dc:creator><pubDate>Wed, 23 Jun 2004 09:25:16 GMT</pubDate></item><item><title><![CDATA[Reply to Von einer Klasse, auf eine Funktion einer anderen Klasse zugreifen on Wed, 23 Jun 2004 09:34:08 GMT]]></title><description><![CDATA[<p>Danke dir.</p>
<p>Ich versuche das jetzt erst einmal umzusetzen. Und was mach ich wenn ich den Dialog nicht so aufrufe? denn ich habe hier einen angedockten Dialog, und weis nicht wo der aufgerufen wird....</p>
<p>Kannst du dein obiges Beispiel noch vervollständigen?</p>
<p>asmodia</p>
]]></description><link>https://www.c-plusplus.net/forum/post/546335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/546335</guid><dc:creator><![CDATA[asmodia]]></dc:creator><pubDate>Wed, 23 Jun 2004 09:34:08 GMT</pubDate></item></channel></rss>