<?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[Klasse, Struktur, Schoblonen, Funktionen?]]></title><description><![CDATA[<p>Guten Tag.</p>
<p>Ich habe vor ein Programm über Matrizenrechnung zu schreiben (Invertieren, Determinate, Multiplikation, Adjungierte Matrix, u.v.m berechnen). Die Algorithmen sind mir klar, da ich Mathe studiere, doch allerdings fehlt mir die Idee bei der Programmierung.</p>
<p>Mein Einfall ist es eine Klasse zu schreiben, mit Variablen für Breite und Höhe der Matrix und ein 2-dimensionales Feld für die Elemente.<br />
Mit geeigneten Methoden lässt sich leicht die Determinante (zum Beispiel) berechnen.</p>
<p>Mein Problem ist jetzt aber, wie ich Operationen mit 2 Matrizen ausführen kann, also zum Beispiel die Multiplikation. Kann man 2 Exemplare von Klassen als Funktionsparameter nehmen und einen als Rückgabewert? Wenn ich mich richtig erinnere ging das irgendwie nur mit Pointern oder irre ich mich da?</p>
<p>Das nächste Problem ist, dass ich das ganze irgendwie in eine .h-Datei (oder in irgendein externes Modul) reinpacken möchte, so etwas habe ich allerdings noch nie gemacht und weiß nicht, wie ich das anstellen könnte.</p>
<p>Wäre nett, wenn mir jemand bei dem Problem helfen könnte, oder mir nützliche Links schicken könnte.<br />
Ich kenne leider den Fachausdruck für dieses Problem mit den .h-Dateien nicht, sonst würd ich ja selber rumgoogeln.</p>
<p>Schonmal Vielen Dank für jede Bemühung eurerseits.</p>
<p>Gruß<br />
Max</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/180260/klasse-struktur-schoblonen-funktionen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 20:19:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/180260.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 30 Apr 2007 16:25:49 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klasse, Struktur, Schoblonen, Funktionen? on Mon, 30 Apr 2007 16:25:49 GMT]]></title><description><![CDATA[<p>Guten Tag.</p>
<p>Ich habe vor ein Programm über Matrizenrechnung zu schreiben (Invertieren, Determinate, Multiplikation, Adjungierte Matrix, u.v.m berechnen). Die Algorithmen sind mir klar, da ich Mathe studiere, doch allerdings fehlt mir die Idee bei der Programmierung.</p>
<p>Mein Einfall ist es eine Klasse zu schreiben, mit Variablen für Breite und Höhe der Matrix und ein 2-dimensionales Feld für die Elemente.<br />
Mit geeigneten Methoden lässt sich leicht die Determinante (zum Beispiel) berechnen.</p>
<p>Mein Problem ist jetzt aber, wie ich Operationen mit 2 Matrizen ausführen kann, also zum Beispiel die Multiplikation. Kann man 2 Exemplare von Klassen als Funktionsparameter nehmen und einen als Rückgabewert? Wenn ich mich richtig erinnere ging das irgendwie nur mit Pointern oder irre ich mich da?</p>
<p>Das nächste Problem ist, dass ich das ganze irgendwie in eine .h-Datei (oder in irgendein externes Modul) reinpacken möchte, so etwas habe ich allerdings noch nie gemacht und weiß nicht, wie ich das anstellen könnte.</p>
<p>Wäre nett, wenn mir jemand bei dem Problem helfen könnte, oder mir nützliche Links schicken könnte.<br />
Ich kenne leider den Fachausdruck für dieses Problem mit den .h-Dateien nicht, sonst würd ich ja selber rumgoogeln.</p>
<p>Schonmal Vielen Dank für jede Bemühung eurerseits.</p>
<p>Gruß<br />
Max</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1276450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276450</guid><dc:creator><![CDATA[Max3000]]></dc:creator><pubDate>Mon, 30 Apr 2007 16:25:49 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse, Struktur, Schoblonen, Funktionen? on Mon, 30 Apr 2007 16:41:51 GMT]]></title><description><![CDATA[<p>Hi...</p>
<p>Max3000 schrieb:</p>
<blockquote>
<p>Mein Problem ist jetzt aber, wie ich Operationen mit 2 Matrizen ausführen kann, also zum Beispiel die Multiplikation. Kann man 2 Exemplare von Klassen als Funktionsparameter nehmen und einen als Rückgabewert? Wenn ich mich richtig erinnere ging das irgendwie nur mit Pointern oder irre ich mich da?</p>
</blockquote>
<p>Das geht ganz einfach. Du kannst den operator* für deine Klasse überladen, sodass du sowas machen kannst:</p>
<pre><code class="language-cpp">Matrix a,b;
// ...
Matrix c = a*b;
</code></pre>
<p>Das überladen sieht dann so aus:</p>
<pre><code class="language-cpp">const Matrix operator*(const Matrix&amp; a, const Matrix&amp; b)
{
   Matrix res;
   // res.bla(a.f()*b.f()); etc. : Berechnen und in Matrix schreiben
   return res;
}
</code></pre>
<p>Max3000 schrieb:</p>
<blockquote>
<p>Das nächste Problem ist, dass ich das ganze irgendwie in eine .h-Datei (oder in irgendein externes Modul) reinpacken möchte, so etwas habe ich allerdings noch nie gemacht und weiß nicht, wie ich das anstellen könnte.</p>
</blockquote>
<p>Du willst wahrscheinlich Implementation und Schnittstelle trennen <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 />
Dafür schreibst du deine Klassendeklaration in eine .h ( Header ) - Datei:</p>
<pre><code class="language-cpp">#ifndef _MATRIX_
#define _MATRIX

class Matrix { ... };

#endif
</code></pre>
<p>Und definierst sie dann in einer .cpp:</p>
<pre><code class="language-cpp">#include &quot;matrix.h&quot;

Matrix::Matrix() { ... }

void Matrix::bla(...) { }
</code></pre>
<p>Jenachdem welche Entwicklungsumgebung du nutzt, wird alles zusammengelinkt und *tataa*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1276468</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276468</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 30 Apr 2007 16:41:51 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse, Struktur, Schoblonen, Funktionen? on Tue, 01 May 2007 08:59:00 GMT]]></title><description><![CDATA[<p>Max3000 schrieb:</p>
<blockquote>
<p>Guten Tag.<br />
....<br />
Mein Problem ist jetzt aber, wie ich Operationen mit 2 Matrizen ausführen kann, also zum Beispiel die Multiplikation. Kann man 2 Exemplare von Klassen als Funktionsparameter nehmen und einen als Rückgabewert? Wenn ich mich richtig erinnere ging das irgendwie nur mit Pointern oder irre ich mich da?</p>
<p>Das nächste Problem ist, dass ich das ganze irgendwie in eine .h-Datei (oder in irgendein externes Modul) reinpacken möchte, so etwas habe ich allerdings noch nie gemacht und weiß nicht, wie ich das anstellen könnte.</p>
<p>Wäre nett, wenn mir jemand bei dem Problem helfen könnte, oder mir nützliche Links schicken könnte.<br />
...</p>
</blockquote>
<p>Das Überladen wird hier erklärt:<br />
<a href="http://www.oop-mit-cpp.de/kap9.pdf" rel="nofollow">http://www.oop-mit-cpp.de/kap9.pdf</a></p>
<p>Beispiel mit Matrizen (die ihrerseits auf Vektoren basieren):<br />
<a href="http://www.oop-mit-cpp.de/cppbuch/k11/matrix/" rel="nofollow">http://www.oop-mit-cpp.de/cppbuch/k11/matrix/</a><br />
Gruß!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1276755</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1276755</guid><dc:creator><![CDATA[helpie]]></dc:creator><pubDate>Tue, 01 May 2007 08:59:00 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse, Struktur, Schoblonen, Funktionen? on Tue, 01 May 2007 15:33:08 GMT]]></title><description><![CDATA[<p>Hallo nochmal.</p>
<p>Ich habe jetzt mal angefangen die Klasse zu schreiben und bekomme beim Compilieren schon 14 Fehler, die eigentlich total unlogisch sind.<br />
Ich schick einfach mal meinen Code:</p>
<p>matrix.h:</p>
<pre><code class="language-cpp">#ifndef _MATRIX_
#define _MATRIX

class matrix
{
	private:
		int m, n;
		float *elements;
	public:
		char name[3];
		bool init(int k, int l);
		~matrix(void);
		int errcode;
};

#endif
</code></pre>
<p>matrix.cpp:</p>
<pre><code class="language-cpp">#include &quot;matrix.h&quot;

bool matrix::init(int k, int l)
{
	if((k&gt;0) &amp;&amp; (l&gt;0))
	{
		if ((k&lt;10) &amp;&amp; (l&lt;10))
		{
			matrix.m=k;
			matrix.n=l;
			matrix.elements = (float*)malloc(sizeof(float)*k*l);
			matrix.errcode = 0;
			return true;
		}else{
			matrix.errcode = 2;	
		};
	}else{
		matrix.errcode = 1;
	};
	return false;
}

matrix::~matrix(void)
{
	free(matrix.elements);
}
</code></pre>
<p>Und die Fehlermeldung:<br />
--------------------Configuration: Matrizen - Win32 Debug--------------------<br />
Compiling...<br />
matrix.cpp<br />
c:\dokumente und einstellungen\max\eigene dateien\c++\matrizen\matrix.cpp(9) : error C2143: syntax error : missing ';' before '.'<br />
c:\dokumente und einstellungen\max\eigene dateien\c++\matrizen\matrix.cpp(9) : error C2143: syntax error : missing ';' before '.'<br />
c:\dokumente und einstellungen\max\eigene dateien\c++\matrizen\matrix.cpp(10) : error C2143: syntax error : missing ';' before '.'<br />
c:\dokumente und einstellungen\max\eigene dateien\c++\matrizen\matrix.cpp(10) : error C2143: syntax error : missing ';' before '.'<br />
c:\dokumente und einstellungen\max\eigene dateien\c++\matrizen\matrix.cpp(11) : error C2143: syntax error : missing ';' before '.'<br />
c:\dokumente und einstellungen\max\eigene dateien\c++\matrizen\matrix.cpp(11) : error C2143: syntax error : missing ';' before '.'<br />
c:\dokumente und einstellungen\max\eigene dateien\c++\matrizen\matrix.cpp(12) : error C2143: syntax error : missing ';' before '.'<br />
c:\dokumente und einstellungen\max\eigene dateien\c++\matrizen\matrix.cpp(12) : error C2143: syntax error : missing ';' before '.'<br />
c:\dokumente und einstellungen\max\eigene dateien\c++\matrizen\matrix.cpp(15) : error C2143: syntax error : missing ';' before '.'<br />
c:\dokumente und einstellungen\max\eigene dateien\c++\matrizen\matrix.cpp(15) : error C2143: syntax error : missing ';' before '.'<br />
c:\dokumente und einstellungen\max\eigene dateien\c++\matrizen\matrix.cpp(18) : error C2143: syntax error : missing ';' before '.'<br />
c:\dokumente und einstellungen\max\eigene dateien\c++\matrizen\matrix.cpp(18) : error C2143: syntax error : missing ';' before '.'<br />
c:\dokumente und einstellungen\max\eigene dateien\c++\matrizen\matrix.cpp(25) : error C2065: 'free' : undeclared identifier<br />
c:\dokumente und einstellungen\max\eigene dateien\c++\matrizen\matrix.cpp(25) : error C2275: 'matrix' : illegal use of this type as an expression<br />
Main.cpp<br />
c:\dokumente und einstellungen\max\eigene dateien\c++\matrizen\main.cpp(98) : warning C4700: local variable 'hButtonCreate' used without having been initialized<br />
Error executing cl.exe.</p>
<p>Matrizen.exe - 14 error(s), 1 warning(s)</p>
<p>Hat da jemand eine Ahnung, was da falsch sein kann?<br />
Muss ich da vielleicht nochwas im Compiler linken?<br />
Wenn ja bitte ins Compilerforum verschieben.<br />
Ich benutze MS VC++ 6.0 Professional.</p>
<p>Danke</p>
<p>Gruß Max</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277006</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277006</guid><dc:creator><![CDATA[Max3000]]></dc:creator><pubDate>Tue, 01 May 2007 15:33:08 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse, Struktur, Schoblonen, Funktionen? on Tue, 01 May 2007 15:47:48 GMT]]></title><description><![CDATA[<p>Max3000 schrieb:</p>
<blockquote>
<p>Hallo nochmal.</p>
<pre><code class="language-cpp">#ifndef _MATRIX_
#define _MATRIX
</code></pre>
</blockquote>
<p>Der &quot;Einschlusswächter&quot;(*) stimmt nicht:</p>
<pre><code class="language-cpp">#define _MATRIX_
</code></pre>
<p>ist glaube ich eher das was Du meinst.</p>
<p>Grüsse</p>
<p>*this</p>
<p>P.S.: (*) &quot;Inclusion-Guard&quot; klingt irgendwie besser <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/1277012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277012</guid><dc:creator><![CDATA[Gast++]]></dc:creator><pubDate>Tue, 01 May 2007 15:47:48 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse, Struktur, Schoblonen, Funktionen? on Tue, 01 May 2007 15:49:11 GMT]]></title><description><![CDATA[<p>Hab das _ irgendwie verloren <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="🙂"
    /> Zudem sprichst du alle deine Elemente mit matrix. an. Das matrix. muss davor weg <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/1277015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277015</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 01 May 2007 15:49:11 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse, Struktur, Schoblonen, Funktionen? on Tue, 01 May 2007 15:49:43 GMT]]></title><description><![CDATA[<p>Danke.</p>
<p>Ich habe aber den Hauptfehler eben gefunden.<br />
Bei den Methoden muss ich doch nicht nochmal matrix:: vor jede Variable schreiben.</p>
<p>Ihr könnt mich jetzt hier ruhig aufs Übelste beschimpfen.<br />
Ich habs verdient.</p>
<p>Grüße<br />
Max</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277018</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277018</guid><dc:creator><![CDATA[Max3000]]></dc:creator><pubDate>Tue, 01 May 2007 15:49:43 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse, Struktur, Schoblonen, Funktionen? on Tue, 01 May 2007 17:50:02 GMT]]></title><description><![CDATA[<p>Sorry, aber ich hab doch noch einmal eine Frage:</p>
<p>Beim Compilieren meldet sich jedesmal der Debugger mit dem Fehler:<br />
User breakpoint called from code at 0xa66775</p>
<p>Im Output Fenster steht:<br />
First-chance exception in Matrizen.exe (45AD9FCA.DLL): 0xC0000005: Access Violation.</p>
<p>Und es wird ein ewig langer Text geladen mit einer Markierung an folgender Zeile:<br />
00A66775 int 3</p>
<p>Genauer kann ich das Problem leider nicht beschreiben.</p>
<p>Hier nochmal mein ganzer Code:</p>
<pre><code class="language-cpp"># include &lt;windows.h&gt;
# include &quot;matrix.h&quot;

TCHAR szAppName[] = TEXT(&quot;Matrizen&quot;);

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
					LPSTR lpszCmdLine, int iCmdShow)
{
	HWND hwnd;
	WNDCLASS wndclass;
	MSG msg;

	wndclass.style = CS_HREDRAW| CS_VREDRAW;
	wndclass.cbClsExtra = 0;
	wndclass.cbWndExtra = 0;
	wndclass.lpfnWndProc = WndProc;
	wndclass.hInstance = hInstance;
	wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
	wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
	wndclass.lpszMenuName = (NULL);
	wndclass.lpszClassName = szAppName;
	wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);

	if(!RegisterClass(&amp;wndclass))
	{
		MessageBox(NULL, TEXT(&quot;Fehler: Programm setzt Unicode voraus.&quot;), szAppName, MB_ICONERROR);
		return 0;
	};

	hwnd = CreateWindow (szAppName,
						 szAppName,
						 WS_CAPTION | WS_THICKFRAME | WS_OVERLAPPED | 
						 WS_MINIMIZEBOX | WS_SYSMENU,
						 100,
						 100,
						 500,
						 500,
						 NULL,
						 NULL,
						 hInstance,
						 NULL);

	ShowWindow(hwnd, iCmdShow);
	UpdateWindow(hwnd);

	while(GetMessage(&amp;msg, NULL, 0, 0))
	{
		TranslateMessage(&amp;msg);
		DispatchMessage(&amp;msg);
	};
	return msg.wParam;
};

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	HWND hEditM, hEditN, hButtonCreate, hGroupAdd;
	HDC hdc;
	PAINTSTRUCT ps;
	matrix m1;

	switch(message){
		case WM_PAINT:
			hdc = BeginPaint(hwnd, &amp;ps);
			TextOut(hdc, 50, 35, TEXT(&quot;Dimension:&quot;),10); 
			TextOut(hdc, 215, 35, TEXT(&quot;x&quot;), 1);
			EndPaint(hwnd, &amp;ps);
			return 0;
		case WM_CREATE:
			hButtonCreate = CreateWindow (TEXT(&quot;button&quot;),
										  TEXT(&quot;Matrix erstellen&quot;),
										  WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
										  330, 30, 130, 30,
										  hwnd, NULL, 
										  ((LPCREATESTRUCT) lParam)-&gt;hInstance, NULL);

			hGroupAdd =     CreateWindow (TEXT(&quot;button&quot;),
										  TEXT(&quot;Neue Matrix hinzufügen&quot;),
										  WS_CHILD | WS_VISIBLE | BS_GROUPBOX,
										  20, 10, 460, 60,
										  hwnd, NULL, 
										  ((LPCREATESTRUCT) lParam)-&gt;hInstance, NULL);

			hEditM =        CreateWindow (TEXT(&quot;edit&quot;), NULL, WS_CHILD | WS_BORDER | 
										  WS_VISIBLE | ES_CENTER, 150, 35, 40, 20, hwnd, NULL,
								          ((LPCREATESTRUCT) lParam)-&gt;hInstance, NULL);

			hEditN =        CreateWindow (TEXT(&quot;edit&quot;), NULL, WS_CHILD | WS_BORDER | 
										  WS_VISIBLE | ES_CENTER, 250, 35, 40, 20, hwnd, NULL,
								          ((LPCREATESTRUCT) lParam)-&gt;hInstance, NULL);
			return 0;
		case WM_DESTROY:
			PostQuitMessage (0);
			return 0;
		case WM_COMMAND:
			if(LOWORD(wParam)==GetWindowLong (hButtonCreate, GWL_ID) &amp;&amp; 
				HIWORD(wParam)==BN_CLICKED)
				MessageBox(hwnd, TEXT(&quot;Geht!&quot;), szAppName, NULL);
			return 0;
	};
	return DefWindowProc(hwnd, message, wParam, lParam);
};
</code></pre>
<p>matrix.h</p>
<pre><code class="language-cpp">#ifndef _MATRIX_H_
#define _MATRIX_H_

class matrix
{
	private:
		int m, n;
		float *elements;
	public:
		char name[3];
		bool init(int k, int l);
		~matrix(void);
		int errcode;
};

#endif
</code></pre>
<p>matrix.cpp</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &quot;matrix.h&quot;

using namespace std;

bool matrix::init(int k, int l)
{
	if((k&gt;0) &amp;&amp; (l&gt;0))
	{
		if ((k&lt;10) &amp;&amp; (l&lt;10))
		{
			m=k;
			n=l;
			elements = (float*)calloc(l*k+1,sizeof(float));
			errcode = 0;
			return true;
		}else{
			errcode = 2;	
		};
	}else{
		errcode = 1;
	};
	return false;
};

matrix::~matrix(void)
{
	free(elements);
};
</code></pre>
<p>In welcher Zeile der Fehler ist, steht leider nicht dabei.<br />
Die main.cpp muss aber richtig sein, die hat schonmal geklappt bevor ich die Klasse eingefügt habe.</p>
<p>Gruß<br />
Max</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277097</guid><dc:creator><![CDATA[Max3000]]></dc:creator><pubDate>Tue, 01 May 2007 17:50:02 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse, Struktur, Schoblonen, Funktionen? on Wed, 02 May 2007 05:50:39 GMT]]></title><description><![CDATA[<p>Obs daran liegt weisz ich nicht, aber was willst du mit</p>
<pre><code class="language-cpp">elements = (float*)calloc(l*k+1,sizeof(float));
</code></pre>
<p>anstatt die C++ Mittel new und delete zu nutzen.<br />
Ergo sowas wie</p>
<pre><code class="language-cpp">elements=new float(l*k+1);
</code></pre>
<p>oder so ähnlich. Im Destruktor dann statt free eben delete aufrufen.</p>
<p>Vielleicht lieg ich auch daneben.</p>
<p>Auszerdem: die ; nach den } können überall weg auszer nach Deklaration einer Klasse, Struct, enum usw. Also nach allen if Blöcken und Funktionen z.B.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277277</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277277</guid><dc:creator><![CDATA[Shinja]]></dc:creator><pubDate>Wed, 02 May 2007 05:50:39 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse, Struktur, Schoblonen, Funktionen? on Wed, 02 May 2007 09:51:46 GMT]]></title><description><![CDATA[<p>Erstmal: Das was Shinja gesagt hat, solltest du befolgen.<br />
Zeitens: Der Fehler kommt davon das du in deinem Code deine matrix erzeugst (m1) und am Ende des Blocks der Destruktor vom Matrix aufgerufen wird.</p>
<p>Da wird natürlich free aufgerufen, aber ... du hast nie init() aufgerufen und somit zeigt dein float *elements keine Ahnung wo hin.</p>
<p>Dein init sollte lieber nen Konstrukor sein, womit alle Elemente erstmals initialisert werden...</p>
<p>Edit: Sehe gerade das dein init() false oder true zurückgibt, das kannst du natürlich im Konstruktor nicht machen. Würde dir dann empfehlen dein *element im Konstruktor auf 0 zu setzen und dein init() zu behalten. Wenn du niemals init() aufrufen solltest, ist das nicht schlimm. Ein delete auf ein Nullzeiger macht nichts, wie das bei free ist weiß ich nicht ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277393</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277393</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 02 May 2007 09:51:46 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse, Struktur, Schoblonen, Funktionen? on Thu, 03 May 2007 06:44:03 GMT]]></title><description><![CDATA[<p>Erstmal Danke.<br />
Ich hab jetzt alles geändert und die Klasse funktioniert soweit erst einmal.</p>
<p>Jetzt will ich aber für jedes Element ein Editfenster erzeugen und hab auch wieder einen Pointer auf das Handle gelegt und versucht mit new zu allokieren.<br />
Allerdings stürzt dann das Programm ab, wenn ich damit arbeite (zumindest nur manchmal, wenn ich grad neugestartet habe nicht). Außerdem stürzt das Programm auch ab, wenn ich es schließe. Hat jemand eine Idee, was ich da falsch gemacht habe.</p>
<p>Ich schicke mal meine Main.cpp:</p>
<pre><code class="language-cpp"># include &lt;windows.h&gt;
# include &lt;iostream.h&gt;
# include &quot;matrix.h&quot;

TCHAR szAppName[] = TEXT(&quot;Matrizen&quot;);

LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM);

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
					LPSTR lpszCmdLine, int iCmdShow)
{
	HWND hwnd;
	WNDCLASS wndclass;
	MSG msg;

	wndclass.style = CS_HREDRAW| CS_VREDRAW;
	wndclass.cbClsExtra = 0;
	wndclass.cbWndExtra = 0;
	wndclass.lpfnWndProc = WndProc;
	wndclass.hInstance = hInstance;
	wndclass.hCursor = LoadCursor(NULL, IDC_ARROW);
	wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);
	wndclass.lpszMenuName = (NULL);
	wndclass.lpszClassName = szAppName;
	wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH);

	if(!RegisterClass(&amp;wndclass))
	{
		MessageBox(NULL, TEXT(&quot;Fehler: Programm setzt Unicode voraus.&quot;), szAppName, MB_ICONERROR);
		return 0;
	};

	hwnd = CreateWindow (szAppName,
						 szAppName,
						 WS_CAPTION | WS_THICKFRAME | WS_OVERLAPPED | 
						 WS_MINIMIZEBOX | WS_SYSMENU,
						 100,
						 100,
						 500,
						 500,
						 NULL,
						 NULL,
						 hInstance,
						 NULL);

	ShowWindow(hwnd, iCmdShow);
	UpdateWindow(hwnd);

	while(GetMessage(&amp;msg, NULL, 0, 0))
	{
		TranslateMessage(&amp;msg);
		DispatchMessage(&amp;msg);
	};
	return msg.wParam;
};

LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	HWND hEditM, hEditN, hButtonCreate, hGroupAdd;
	HWND *hEditElements;
	HDC hdc;
	PAINTSTRUCT ps;
	//matrix *mat;
	int ctr=0;
	int m, n, i, j;

	switch(message){
		case WM_PAINT:
			hdc = BeginPaint(hwnd, &amp;ps);
			TextOut(hdc, 50, 35, TEXT(&quot;Dimension:&quot;),10); 
			TextOut(hdc, 215, 35, TEXT(&quot;x&quot;), 1);
			EndPaint(hwnd, &amp;ps);
			return 0;
		case WM_CREATE:
			hButtonCreate = CreateWindow (TEXT(&quot;button&quot;),
										  TEXT(&quot;Matrix erstellen&quot;),
										  WS_CHILD | WS_VISIBLE | BS_PUSHBUTTON,
										  330, 30, 130, 30,
										  hwnd, NULL, 
										  ((LPCREATESTRUCT) lParam)-&gt;hInstance, NULL);

			hGroupAdd =     CreateWindow (TEXT(&quot;button&quot;),
										  TEXT(&quot;Neue Matrix hinzufügen&quot;),
										  WS_CHILD | WS_VISIBLE | BS_GROUPBOX,
										  20, 10, 460, 60,
										  hwnd, NULL, 
										  ((LPCREATESTRUCT) lParam)-&gt;hInstance, NULL);

			hEditM =        CreateWindow (TEXT(&quot;edit&quot;), NULL, WS_CHILD | WS_BORDER | 
										  WS_VISIBLE | ES_CENTER, 150, 35, 40, 20, hwnd, NULL,
								          ((LPCREATESTRUCT) lParam)-&gt;hInstance, NULL);

			hEditN =        CreateWindow (TEXT(&quot;edit&quot;), NULL, WS_CHILD | WS_BORDER | 
										  WS_VISIBLE | ES_CENTER, 250, 35, 40, 20, hwnd, NULL,
								          ((LPCREATESTRUCT) lParam)-&gt;hInstance, NULL);
			return 0;
		case WM_DESTROY:
			delete[] hEditElements;
			PostQuitMessage (0);
			return 0;
		case WM_COMMAND:
			if(LOWORD(wParam)==GetWindowLong (hButtonCreate, GWL_ID) &amp;&amp; 
				HIWORD(wParam)==BN_CLICKED)
			{
				//Hier kommt der Fehler
				ctr++;
				m=3;//hEditM
				n=3;//hEditN
				hEditElements = new HWND[m*n];
				MessageBox(hwnd, TEXT(&quot;Bis hierhin geht das noch&quot;), szAppName, NULL);
				for(i=0;i&lt;=m-1;i++){
					for(j=0;j&lt;=n-1;j++)
					{	hEditElements[i*n+j] = CreateWindow
											(&quot;edit&quot;,
											 NULL,
											 WS_CHILD | WS_BORDER | ES_CENTER | WS_VISIBLE,
											 20+80*i, 180+30*j, 70, 20,
											 hwnd, NULL,
											 ((LPCREATESTRUCT) lParam)-&gt;hInstance, NULL);
					};
				};

			};
			return 0;
		case WM_CLOSE:
			delete []hEditElements;
			return 0;
	};
	return DefWindowProc(hwnd, message, wParam, lParam);
};
</code></pre>
<p>Geht sowas mit dem Datentyp HWND nicht?<br />
Ist es eine Fehlerbedingung wenn ich ein Feld deallokiere, wenn er nicht einmal allokiert ist?</p>
<p>Bitte helft mir.</p>
<p>Gruß<br />
Max</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1277939</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1277939</guid><dc:creator><![CDATA[Max3000]]></dc:creator><pubDate>Thu, 03 May 2007 06:44:03 GMT</pubDate></item></channel></rss>