<?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[Aufruf einer Klassenmethode]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p>Ich habe eine Klasse Namens KlassseA in C++ definiert. Ebenso habe ich eine Klasse KlasseB definiert. KlasseB enthält ein Array on KlasseA</p>
<p>#include &quot;KlasseA.h&quot;</p>
<pre><code class="language-cpp">class KlasseA
{
  void onUpdate(void);
}

void onUpdate(void)
{
   rufe DoSomething von KlasseB auf ???? geht das?:)
}

class KlasseB
{
   KlasseA Elemente[10];
   void DoSomething(int a, int b);
}
</code></pre>
<p>Ist es möglich, dass ich Klasse A eine Referenz von Klasse B<br />
z.B. bei der Initialisierung mitgeben kann, damit z.B. die Methode onUpdate in KlasseA DoSomething von KlasseB aufrufen kann?</p>
<p>Schön wäre da vielleicht eine Event-Prozedur. Ich komme aber leider nicht drauf, wie ich hier vorgehen muss.</p>
<p>Vielen Dank für Eure Tipps. Ich stehe hier vor einem grossen Wald.</p>
<p>Geri</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/157992/aufruf-einer-klassenmethode</link><generator>RSS for Node</generator><lastBuildDate>Wed, 09 Sep 2026 10:35:02 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/157992.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 31 Aug 2006 12:07:10 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Aufruf einer Klassenmethode on Thu, 31 Aug 2006 12:07:10 GMT]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p>Ich habe eine Klasse Namens KlassseA in C++ definiert. Ebenso habe ich eine Klasse KlasseB definiert. KlasseB enthält ein Array on KlasseA</p>
<p>#include &quot;KlasseA.h&quot;</p>
<pre><code class="language-cpp">class KlasseA
{
  void onUpdate(void);
}

void onUpdate(void)
{
   rufe DoSomething von KlasseB auf ???? geht das?:)
}

class KlasseB
{
   KlasseA Elemente[10];
   void DoSomething(int a, int b);
}
</code></pre>
<p>Ist es möglich, dass ich Klasse A eine Referenz von Klasse B<br />
z.B. bei der Initialisierung mitgeben kann, damit z.B. die Methode onUpdate in KlasseA DoSomething von KlasseB aufrufen kann?</p>
<p>Schön wäre da vielleicht eine Event-Prozedur. Ich komme aber leider nicht drauf, wie ich hier vorgehen muss.</p>
<p>Vielen Dank für Eure Tipps. Ich stehe hier vor einem grossen Wald.</p>
<p>Geri</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128330</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128330</guid><dc:creator><![CDATA[Geri]]></dc:creator><pubDate>Thu, 31 Aug 2006 12:07:10 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer Klassenmethode on Thu, 31 Aug 2006 12:52:51 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile.php?mode=viewprofile&amp;u=18363" rel="nofollow">Jochen Kalmbach</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=58" rel="nofollow">C++/CLI mit .NET</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum.php?f=15" rel="nofollow">C++</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic.php?t=39405" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128377</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128377</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Thu, 31 Aug 2006 12:52:51 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer Klassenmethode on Fri, 01 Sep 2006 08:53:28 GMT]]></title><description><![CDATA[<p>Erkundige dich mal nach Klassenzeigern (manchmal auch Methodenzeiger genannt).</p>
<p>Hier ungetestest eine mögliche Lösung:</p>
<pre><code class="language-cpp">class KlasseB; // forward declaration (Vorwärtsdeklaration)

class KlasseA
{
public:
  typedef void (KlasseB::*MethodeB)(int a, int b); // selben Parameter wie aufzurufende Methode

  KlasseA()
    : m_b(0), m_m(0)
  {
  }

  SetB(KlasseB *b, MethodeB m)
  {
     m_b = b;
     m_m = m;
  }

  void onUpdate(void);

private:
  KlasseB *m_b;
  MethodeB m_m;
};

void KlasseA::onUpdate(void)
{
   if(m_b)
     (m_b-&gt;*m_m)(0, 1); // hier Aufruf der übergebenen Methode.
                        // und noch die Parameter anpassen...
}

class KlasseB
{
   KlasseA Elemente[10];

public:
   KlasseB();

   void DoSomething(int a, int b);
};

KlasseB::KlasseB()
{
   // exzemplarisch für ein Element
   Elemente[0].SetB(this, &amp;KlasseB::DoSomething);

   Elemente[0].onUpdate();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1128435</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128435</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Fri, 01 Sep 2006 08:53:28 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer Klassenmethode on Thu, 31 Aug 2006 14:30:28 GMT]]></title><description><![CDATA[<p>Hallo TH</p>
<p>Super, vielen Dank für das ausführliche Beispiel. Das ist genau das, was ich gesucht habe!</p>
<p>Inzwischen habe ich das Ganze in ein Progrämmchen gepackt.</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;

class KlasseB; // forward declaration (Vorwärtsdeklaration) 

class KlasseA 
{ 
public: 

  typedef void (KlasseB::*MethodeB)(int a, int b); // selben Parameter wie aufzurufende Methode 

  KlasseA() : m_b(0), m_m(0) 
  { 
  } 

  void SetB(KlasseB *b, MethodeB m) 
  { 
     m_b = b; 
     m_m = m; 
  } 

	void onUpdate(void); 

	private: 
		KlasseB *m_b; 
		MethodeB m_m; 

}

void KlasseA::onUpdate(void) 
{ 
   if(m_b) 
     (m_b-&gt;*m_m)(0, 1); // hier Aufruf der übergebenen Methode. 
                        // und noch die Parameter anpassen... 

} 
class KlasseB 
{ 
   KlasseA Elemente[10]; 

public: 
   KlasseB(); 

   void DoSomething(int a, int b); 
} 

KlasseB::KlasseB() 
{ 
   // exzemplarisch für ein Element 
   Elemente[0].SetB(this, &amp;B::DoSomething);
   Elemente[0].onUpdate(); 
} 

int _tmain(int argc, _TCHAR* argv[])
{
	return 0;
}
</code></pre>
<p>Irgendwie bekomme ich es aber nicht her die Fehler auszumärzen, die mir der Compiler da liefert.</p>
<p>error C2371: 'KlasseA::onUpdate' : redefinition; different basic types</p>
<p>error C2533: 'KlasseB::__ctor' : constructors not allowed a return type</p>
<p>error C2556: 'KlasseA KlasseA::onUpdate(void)' : overloaded function differs only by return type from 'void KlasseA::onUpdate(void)'</p>
<p>error C2628: 'KlasseA' followed by 'void' is illegal (did you forget a ';'?)<br />
fatal error C1903: unable to recover from previous error(s); stopping compilation</p>
<p>Eine Frage aber habe ich noch. Geht das auch, wenn die beiden Klassen in unterschiedlichen Files abgelegt sind?</p>
<p>Vielen Dank nochmals für Deine Mühe, ich werde mich dann auch melden, wenn es funktioniert</p>
<p>Habt ihr vielleicht eine Idee an was es liegt. Stehe hier etwas daneben...</p>
<p>Geri</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128478</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128478</guid><dc:creator><![CDATA[Geri]]></dc:creator><pubDate>Thu, 31 Aug 2006 14:30:28 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer Klassenmethode on Thu, 31 Aug 2006 14:33:50 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>auf jedenfall hast du die Semikolons nach den Klassen vergessen</p>
<pre><code class="language-cpp">class KlasseA
{
...
};
</code></pre>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128498</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Thu, 31 Aug 2006 14:33:50 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer Klassenmethode on Thu, 31 Aug 2006 14:41:53 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich habe mal deinen Code ein wenig verändert (schönere Formartierung, fehlende Semikolons nach den Klassendefinitionen hinzugefügt, B::DoSth. durch KlasseB::Dosth. ersetzt etc.), und so geht es...</p>
<pre><code class="language-cpp">class KlasseB;
typedef void (KlasseB::*MethodeB)(int, int);

class KlasseA
{
private:
	KlasseB *m_b;
	MethodeB m_m;

public:
	void SetB(KlasseB *b, MethodeB m)
	{
		m_b = b;
		m_m = m;
	}

    void onUpdate()
	{
		if(m_b)
		{     
			(m_b-&gt;*m_m)(0, 1);
		} 
	}

	KlasseA() :
		m_b(0),
		m_m(0)
	{
	}
};

class KlasseB
{
private:
	KlasseA Elemente[10];

public:
	void DoSomething(int a, int b);

	KlasseB()
	{
		Elemente[0].SetB(this, &amp;KlasseB::DoSomething);
		Elemente[0].onUpdate();
	}
};

int main()
{
    return 0;
}
</code></pre>
<p>Anyway, irgendwie hätte ich das anders gemacht <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/1128507</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128507</guid><dc:creator><![CDATA[Schildkroete]]></dc:creator><pubDate>Thu, 31 Aug 2006 14:41:53 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer Klassenmethode on Thu, 31 Aug 2006 14:41:35 GMT]]></title><description><![CDATA[<p>Hallo akari</p>
<p>Hast recht, die Änderung habe ich vorgenommen:) Vielen Dank</p>
<p>error C2276: '&amp;' : illegal operation on bound member function expression<br />
error C2653: 'B' : is not a class or namespace name</p>
<pre><code class="language-cpp">Elemente[0].SetB(this, &amp;B::DoSomething);

// heisst es nicht erher:KlasseB?

  Elemente[0].SetB(this, &amp;KlasseB::DoSomething);
</code></pre>
<p>Beste Grüsse<br />
Geri</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128509</guid><dc:creator><![CDATA[Geri]]></dc:creator><pubDate>Thu, 31 Aug 2006 14:41:35 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer Klassenmethode on Thu, 31 Aug 2006 14:51:57 GMT]]></title><description><![CDATA[<p>Hallo Trundle0x7e</p>
<p>Super, vielen Dank!!!:) Jetzt war ich etwas zu langsam.</p>
<p>Du schreibst, du hättest es anderst gemacht. Mich würde deine Varinante wirkliche sehr interessieren. Wäre nett, wenn du mir sie aufzeigst.</p>
<p>Von einer Webseite habe ich ein Beispiel in C# mit Delegates geladen. Die Funktionsweise ist mir klar, Allerdings ist mein Code in unmanaged C++ geschrieben und ich weiss nicht ob man es auf diese Weise auch lösen könnte.</p>
<p>Wen es interessiert: <a href="http://thesource.ofallevil.com/germany/msdn/library/net/Delegates.mspx?mfr=true" rel="nofollow">http://thesource.ofallevil.com/germany/msdn/library/net/Delegates.mspx?mfr=true</a></p>
<p>Beste Grüsse und nochmals vielen Dank</p>
<p>Geri</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128521</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128521</guid><dc:creator><![CDATA[Geri]]></dc:creator><pubDate>Thu, 31 Aug 2006 14:51:57 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer Klassenmethode on Thu, 31 Aug 2006 15:20:17 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich nochmals.</p>
<pre><code class="language-cpp">int _tmain(int argc, _TCHAR* argv[])
{
	KlasseA CA;
	KlasseB CB;

	CA.SetB(&amp;CB,&amp;CB.DoSomething);  //???
	CA.onUpdate();
	while (1==1)
	{
	}
	return 0;
}
</code></pre>
<p>Irgendwie gefällt dem Compiler Zeile 6 noch nicht. Habe schon verschiedene Varinaten probiert:)</p>
<p>error C2276: '&amp;' : illegal operation on bound member function expression</p>
<p>Kann mir bitte einer sagen, woran es liegt? ..ich weiss.. u.a. auch an mir:)</p>
<p>Beste Grüsse<br />
Geri</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128539</guid><dc:creator><![CDATA[Geri]]></dc:creator><pubDate>Thu, 31 Aug 2006 15:20:17 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer Klassenmethode on Thu, 31 Aug 2006 15:28:29 GMT]]></title><description><![CDATA[<p>statt . :: <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/1128548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128548</guid><dc:creator><![CDATA[Schildkroete]]></dc:creator><pubDate>Thu, 31 Aug 2006 15:28:29 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer Klassenmethode on Thu, 31 Aug 2006 15:31:03 GMT]]></title><description><![CDATA[<p>Hallo und vielen Dank für Deine rasche Rückmeldung</p>
<p>Das habe ich auch versucht, erhalte aber mit:</p>
<p>CA.SetB(&amp;CB,&amp;CB::DoSomething); //???</p>
<p>error C2510: 'CB' : left of '::' must be a class/struct/union<br />
error C2065: 'DoSomething' : undeclared identifier</p>
<p>Beste Grüsse<br />
Geri</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128551</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128551</guid><dc:creator><![CDATA[Geri]]></dc:creator><pubDate>Thu, 31 Aug 2006 15:31:03 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer Klassenmethode on Thu, 31 Aug 2006 15:38:44 GMT]]></title><description><![CDATA[<p>KlasseB::DoSth <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/1128557</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128557</guid><dc:creator><![CDATA[Schildkroete]]></dc:creator><pubDate>Thu, 31 Aug 2006 15:38:44 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer Klassenmethode on Thu, 31 Aug 2006 15:48:59 GMT]]></title><description><![CDATA[<p>WOW!!! Super, vielen Dank!!! Ihr seid Spitze <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
<p>Nun würden mich nur noch interessiere wie du dieses Problem gelöst hättest:)?</p>
<p>Beste Grüsse und nochmals vielen Dank für die rasche Hilfe</p>
<p>Geri</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128565</guid><dc:creator><![CDATA[Geri]]></dc:creator><pubDate>Thu, 31 Aug 2006 15:48:59 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer Klassenmethode on Thu, 31 Aug 2006 16:05:03 GMT]]></title><description><![CDATA[<p>Wenn du willst, dass eine bestimmte Methode bei einer bestimmten Klasseninitalisierung aufgerufen wird, hätte ich das einfach so gemacht...</p>
<pre><code class="language-cpp">#include &lt;sstream&gt;
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;
using namespace std;

class CClassB;

class CClassA
{
	friend CClassB;

private:
	void OnInitByB(const string&amp; sArgument)
	{
		cout &lt;&lt; __FUNCTION__ &lt;&lt; &quot; sArgument==&quot; &lt;&lt; sArgument &lt;&lt; endl;
	}
};

class CClassB
{
private:
	vector&lt;CClassA*&gt; m_As;

public:
	~CClassB()
	{
		for(vector&lt;CClassA*&gt;::iterator pA=m_As.begin();
			pA!=m_As.end();
			pA++)
		{
			delete (*pA);
		}
	}

	void AddNewA()
	{
		stringstream ssArgument;
		ssArgument &lt;&lt; &quot;Das Argument von Instanz Nr. &quot; &lt;&lt; m_As.size();

		m_As.push_back(new CClassA());
		m_As.back()-&gt;OnInitByB(ssArgument.str());
	}
};

int main()
{
	CClassB B;
	B.AddNewA();
	B.AddNewA();
	B.AddNewA();
	B.AddNewA();

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1128571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128571</guid><dc:creator><![CDATA[Schildkroete]]></dc:creator><pubDate>Thu, 31 Aug 2006 16:05:03 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer Klassenmethode on Thu, 31 Aug 2006 16:10:12 GMT]]></title><description><![CDATA[<p>Geri schrieb:</p>
<blockquote>
<p>Von einer Webseite habe ich ein Beispiel in C# mit Delegates geladen. Die Funktionsweise ist mir klar, Allerdings ist mein Code in unmanaged C++ geschrieben und ich weiss nicht ob man es auf diese Weise auch lösen könnte.</p>
</blockquote>
<p>Das ist ev. interessant für Dich: <a href="http://www.codeguru.com/cpp/cpp/cpp_mfc/article.php/c4119/" rel="nofollow">Delegates in unmanaged C++</a><br />
oder <a href="http://www.myelin.co.nz/notes/callbacks/cpp-delegates.html" rel="nofollow">das</a> oder <a href="http://www.codeproject.com/cpp/FastDelegate.asp" rel="nofollow">das</a><br />
oder einer der anderen Links, die <a href="http://www.google.ch/search?hs=Wco&amp;hl=de&amp;client=firefox-a&amp;rls=org.mozilla%3Ade%3Aofficial_s&amp;q=delegate+c%2B%2B&amp;btnG=Suche&amp;meta=" rel="nofollow">mein Freund</a> hergibt <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/1128574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128574</guid><dc:creator><![CDATA[THX 1138]]></dc:creator><pubDate>Thu, 31 Aug 2006 16:10:12 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer Klassenmethode on Thu, 31 Aug 2006 17:02:39 GMT]]></title><description><![CDATA[<p>Hallo zusammen</p>
<p>@Trundle0x7e: Sehr interessant, vielen Dank, dass du mir Deinen Lösungsweg ausführlich aufgezeigt hast. Das sieht sehr übersichtlich und kurz aus!</p>
<p>@1310-Logik: Vielen Dank für Deinen Hinweis. Das Thema Delegates interessiert mich wirklich sehr, weil ich glaubh, dass man mit der Technik sehr viele Möglichkeiten hat.</p>
<p>Beste Grüsse und nochmals vielen Dank für Eure sehr kompetente Hilfestellung</p>
<p>Geri</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1128612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1128612</guid><dc:creator><![CDATA[Geri]]></dc:creator><pubDate>Thu, 31 Aug 2006 17:02:39 GMT</pubDate></item></channel></rss>