<?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[Klassenfunktion aus Klassenfunktion aufrufen]]></title><description><![CDATA[<p>Hallo,<br />
ich habe in den letzten Jahren Assembler geschrieben und lerne jetzt C++.<br />
Jetzt habe ich eine Klasse &quot;SLIDER&quot; angefangen.</p>
<pre><code>class SLIDER
{
	private:
		int width;
		int height;
	public:
		SLIDER(int);

		int CreateSlider (HWND, int, int);
		void Init (HWND);
};

SLIDER SLIDER(1);

void SLIDER::Init (HWND hWnd)
{
	RECT rc;	
	GetClientRect (hWnd, &amp;rc);
	width = static_cast&lt;int&gt;(1016 / rc.right * 215);
	height = static_cast&lt;int&gt;(700 / rc.bottom * 16);
}

int SLIDER::CreateSlider (HWND hWnd, int x, int y)
{
	if (!width)	
	{
		SLIDER.Init(hWnd);
	}
	//code.... (funktioniert)
	return 1;
}

SLIDER::SLIDER (int a)
{
}
</code></pre>
<p>SLIDER.CreateSlider wird vom Hauptprogramm aufgerufen und funktioniert. Beim ersten Aufruf sollen jedoch die Werte für width und height entsprechend Fenstergröße berechnet und in die Variablen geschrieben werden.<br />
Dazu müßte ich aus der Funktion .CreateSlider die Funktion .Init aufrufen, aber so wie oben geht es offensichtlich nicht. Deshalb meine Frage: Wie kann man aus einer Klassenfunktion eine andere Klassenfunktion der gleichen Klasse aufrufen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/263841/klassenfunktion-aus-klassenfunktion-aufrufen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 05 Sep 2026 11:20:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/263841.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 28 Mar 2010 15:56:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klassenfunktion aus Klassenfunktion aufrufen on Sun, 28 Mar 2010 15:56:48 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe in den letzten Jahren Assembler geschrieben und lerne jetzt C++.<br />
Jetzt habe ich eine Klasse &quot;SLIDER&quot; angefangen.</p>
<pre><code>class SLIDER
{
	private:
		int width;
		int height;
	public:
		SLIDER(int);

		int CreateSlider (HWND, int, int);
		void Init (HWND);
};

SLIDER SLIDER(1);

void SLIDER::Init (HWND hWnd)
{
	RECT rc;	
	GetClientRect (hWnd, &amp;rc);
	width = static_cast&lt;int&gt;(1016 / rc.right * 215);
	height = static_cast&lt;int&gt;(700 / rc.bottom * 16);
}

int SLIDER::CreateSlider (HWND hWnd, int x, int y)
{
	if (!width)	
	{
		SLIDER.Init(hWnd);
	}
	//code.... (funktioniert)
	return 1;
}

SLIDER::SLIDER (int a)
{
}
</code></pre>
<p>SLIDER.CreateSlider wird vom Hauptprogramm aufgerufen und funktioniert. Beim ersten Aufruf sollen jedoch die Werte für width und height entsprechend Fenstergröße berechnet und in die Variablen geschrieben werden.<br />
Dazu müßte ich aus der Funktion .CreateSlider die Funktion .Init aufrufen, aber so wie oben geht es offensichtlich nicht. Deshalb meine Frage: Wie kann man aus einer Klassenfunktion eine andere Klassenfunktion der gleichen Klasse aufrufen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1874635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1874635</guid><dc:creator><![CDATA[RainerX]]></dc:creator><pubDate>Sun, 28 Mar 2010 15:56:48 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenfunktion aus Klassenfunktion aufrufen on Sun, 28 Mar 2010 16:25:43 GMT]]></title><description><![CDATA[<p>Benutze bitte [cpp]- statt [code]-Tags und stelle sicher, dass du BBCodes nicht deaktiviert hast. Dann sieht es so aus.</p>
<pre><code class="language-cpp">class SLIDER
{
	private:
		int width;
		int height;
	public:
		SLIDER(int);

		int CreateSlider (HWND, int, int);
		void Init (HWND);
};

SLIDER SLIDER(1);

void SLIDER::Init (HWND hWnd)
{
	RECT rc;	
	GetClientRect (hWnd, &amp;rc);
	width = static_cast&lt;int&gt;(1016 / rc.right * 215);
	height = static_cast&lt;int&gt;(700 / rc.bottom * 16);
}

int SLIDER::CreateSlider (HWND hWnd, int x, int y)
{
	if (!width)	
	{
		Init(hWnd); // &lt;- so
	}
	//code.... (funktioniert)
	return 1;
}

SLIDER::SLIDER (int a)
{
}
</code></pre>
<p>Die Lösung steht im Code. Übrigens solltest du in die Funktionsdeklarationen auch Parameternamen schreiben, auch wenn es nicht nötig ist. Schliesslich ist das die Schnittstelle für den Benutzer. Und komplett grossgeschriebene Bezeichner sind auch eher unüblich (ausser für Makros und Konstanten).</p>
<p><strong>Das Wichtigste:</strong> Verwende in C++ Konstruktoren. Öffentliche Init-Funktionen sind hässlich und fehleranfällig. Mach sie privat und entferne die Create-Methode.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1874646</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1874646</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 28 Mar 2010 16:25:43 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenfunktion aus Klassenfunktion aufrufen on Sun, 28 Mar 2010 16:29:27 GMT]]></title><description><![CDATA[<p>danke für die schnelle Antwort. Ich werd's gleich mal ändern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1874653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1874653</guid><dc:creator><![CDATA[RainerX]]></dc:creator><pubDate>Sun, 28 Mar 2010 16:29:27 GMT</pubDate></item><item><title><![CDATA[Reply to Klassenfunktion aus Klassenfunktion aufrufen on Wed, 31 Mar 2010 18:08:21 GMT]]></title><description><![CDATA[<p>Hallo Nexus, nochmals danke für die Antwort. Der Aufruf funktioniert so einwandfrei. Danke auch für die Anregungen, ich konnte sie nach vollziehen.</p>
<p>Gruß Rainer</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1876114</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1876114</guid><dc:creator><![CDATA[RainerX]]></dc:creator><pubDate>Wed, 31 Mar 2010 18:08:21 GMT</pubDate></item></channel></rss>