<?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[Array in Klasse erstellen]]></title><description><![CDATA[<p>Hallo, sorry habe mal wieder eine Frage.<br />
Ich weiss in vielen Threads ist dieses Thema schon behandelt, aber wenn ich es so mache, dann klappt es bei mir dennoch nicht.<br />
Also zu meinem Problem:</p>
<p>Ich habe eine Klasse NodePool:</p>
<p><strong>NodePool.h</strong></p>
<pre><code class="language-cpp">class NodePool
{
private:
	bool existingNodes[];		// contains for each possible node if its existing (true) or not (false)
	std::vector&lt;int&gt; freeNodes;	// contains the ids of all free node positions in the nodelist
	//std::vector&lt;Node&gt; nodelist;	// List Of all Nodes
	int m_numberOfNodes_int;
	//int* ptr_m_numberOfNodes_int;
	std::string label;

	int* ptr_int;
	bool* ptr_bool_ary;
	std::string* ptr_str;

public:
	NodePool(GNG_Parameters&amp;);
	virtual ~NodePool();
</code></pre>
<p>und noch die <strong>NodePool.cpp</strong></p>
<pre><code class="language-cpp">NodePool::NodePool(GNG_Parameters &amp;gng_parameters)
{
*gng_parameters.getNumberOfNodes()  &lt;&lt; std::endl;

	// Label of NodePool Object
	std::string label = &quot;NodePoolObjekt&quot;;
	ptr_str = &amp;label;	

	// Number of maximal Nodes
	m_numberOfNodes_int = *gng_parameters.getNumberOfNodes();
	ptr_int = &amp;m_numberOfNodes_int;

	// Array which contains for each Node if its existing or not
	existingNodes[*gng_parameters.getNumberOfNodes()];
	for(int i = 0; i &lt; *gng_parameters.getNumberOfNodes(); ++i)
	{
			existingNodes[i] = false;	
	}
	ptr_bool_ary = &amp;existingNodes[0];

}
</code></pre>
<p>Es geht um den Array existingNodes[], der ja mit der Größe von *gng_parameters.getNumberOfNodes() initialisiert wird.<br />
Kann mir auch die Elemente ausgeben lassen die sich dann darin befinden (also alle 0, da diese auf false gesetzt wurden).</p>
<p>Wenn ich jetzt aber die Größe von dem Array existingNodes[] mir ausgeben möchte mit:<br />
sizeof(existingNodes)/sizeof(existingNodes[0])<br />
dann kommt immer 0 dabei heraus. Woran kann dies liegen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/224761/array-in-klasse-erstellen</link><generator>RSS for Node</generator><lastBuildDate>Fri, 02 Oct 2026 04:20:30 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/224761.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 14 Oct 2008 18:42:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Array in Klasse erstellen on Tue, 14 Oct 2008 18:42:17 GMT]]></title><description><![CDATA[<p>Hallo, sorry habe mal wieder eine Frage.<br />
Ich weiss in vielen Threads ist dieses Thema schon behandelt, aber wenn ich es so mache, dann klappt es bei mir dennoch nicht.<br />
Also zu meinem Problem:</p>
<p>Ich habe eine Klasse NodePool:</p>
<p><strong>NodePool.h</strong></p>
<pre><code class="language-cpp">class NodePool
{
private:
	bool existingNodes[];		// contains for each possible node if its existing (true) or not (false)
	std::vector&lt;int&gt; freeNodes;	// contains the ids of all free node positions in the nodelist
	//std::vector&lt;Node&gt; nodelist;	// List Of all Nodes
	int m_numberOfNodes_int;
	//int* ptr_m_numberOfNodes_int;
	std::string label;

	int* ptr_int;
	bool* ptr_bool_ary;
	std::string* ptr_str;

public:
	NodePool(GNG_Parameters&amp;);
	virtual ~NodePool();
</code></pre>
<p>und noch die <strong>NodePool.cpp</strong></p>
<pre><code class="language-cpp">NodePool::NodePool(GNG_Parameters &amp;gng_parameters)
{
*gng_parameters.getNumberOfNodes()  &lt;&lt; std::endl;

	// Label of NodePool Object
	std::string label = &quot;NodePoolObjekt&quot;;
	ptr_str = &amp;label;	

	// Number of maximal Nodes
	m_numberOfNodes_int = *gng_parameters.getNumberOfNodes();
	ptr_int = &amp;m_numberOfNodes_int;

	// Array which contains for each Node if its existing or not
	existingNodes[*gng_parameters.getNumberOfNodes()];
	for(int i = 0; i &lt; *gng_parameters.getNumberOfNodes(); ++i)
	{
			existingNodes[i] = false;	
	}
	ptr_bool_ary = &amp;existingNodes[0];

}
</code></pre>
<p>Es geht um den Array existingNodes[], der ja mit der Größe von *gng_parameters.getNumberOfNodes() initialisiert wird.<br />
Kann mir auch die Elemente ausgeben lassen die sich dann darin befinden (also alle 0, da diese auf false gesetzt wurden).</p>
<p>Wenn ich jetzt aber die Größe von dem Array existingNodes[] mir ausgeben möchte mit:<br />
sizeof(existingNodes)/sizeof(existingNodes[0])<br />
dann kommt immer 0 dabei heraus. Woran kann dies liegen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1598976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1598976</guid><dc:creator><![CDATA[redbomber]]></dc:creator><pubDate>Tue, 14 Oct 2008 18:42:17 GMT</pubDate></item><item><title><![CDATA[Reply to Array in Klasse erstellen on Tue, 14 Oct 2008 18:45:41 GMT]]></title><description><![CDATA[<p>Und noch eine Frage.</p>
<p>Wenn ich jetzt von einer anderen Klasse aus auf das NodePool Objekt zugreifen möchte und mir etwa eben diesen Array anschauen möchte, dann gebe ich doch in meiner Klasse NodePool eine Methode an, welche mir einen Pointer auf das erste Element in diesem Array liefert, also in etwa so:</p>
<pre><code class="language-cpp">int* NodePool::getExistingNodesArray(void)
{
	return ptr_bool_ary;
}
</code></pre>
<p>Oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1598978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1598978</guid><dc:creator><![CDATA[redbomber]]></dc:creator><pubDate>Tue, 14 Oct 2008 18:45:41 GMT</pubDate></item><item><title><![CDATA[Reply to Array in Klasse erstellen on Tue, 14 Oct 2008 19:05:19 GMT]]></title><description><![CDATA[<p>redbomber schrieb:</p>
<blockquote>
<pre><code class="language-cpp">class NodePool
{
private:
	bool existingNodes[];		// contains for each possible
</code></pre>
</blockquote>
<p>In C++ kann man kein Array definieren, wenn man nicht entweder die Grösse explizit angibt oder eine Array-Initialisierungsliste verwendet.</p>
<p>redbomber schrieb:</p>
<blockquote>
<pre><code class="language-cpp">// Array which contains for each Node if its existing or not
	existingNodes[*gng_parametergetNumberOfNodes()];
</code></pre>
</blockquote>
<p>Ebenso ist das keine Initialisierung, hier wird versucht, auf das Element mit dem Index <code>*gng_parametergetNumberOfNodes()</code> zuzugreifen.</p>
<p>redbomber schrieb:</p>
<blockquote>
<p>Wenn ich jetzt aber die Größe von dem Array existingNodes[] mir ausgeben möchte mit:<br />
sizeof(existingNodes)/sizeof(existingNodes[0])<br />
dann kommt immer 0 dabei heraus. Woran kann dies liegen?</p>
</blockquote>
<p>Ich frage mich überhaupt, wie das gehen soll. Jeder brauchbare Compiler meldet dir einen Fehler, wenn du ein Array ohne Dimension definierst. Und dein Array <code>existingNodes</code> scheint die Grösse 0 zu haben, anders kann bei einer Division nicht das Resultat 0 herauskommen.</p>
<p>Aber wieso versuchst du dich, mit Zeigern und Nodes herumzuschlagen, während du gleichzeitig Container benutzt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1598986</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1598986</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 14 Oct 2008 19:05:19 GMT</pubDate></item><item><title><![CDATA[Reply to Array in Klasse erstellen on Tue, 14 Oct 2008 19:22:37 GMT]]></title><description><![CDATA[<p>Ok, alles einleuchtend.</p>
<p>Ich werde jetzt erst einmal der Array auch durch einen Vektor ersetzen.<br />
Damit ich mal etwas weiter komme.</p>
<p>Aber um spätere Fragen zu vermeiden.<br />
Wie kann ich dann in dem Header den Array initialisieren. In allen tutorials werden die Arrays nur in der *.cpp erstellt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1598993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1598993</guid><dc:creator><![CDATA[redbomber]]></dc:creator><pubDate>Tue, 14 Oct 2008 19:22:37 GMT</pubDate></item><item><title><![CDATA[Reply to Array in Klasse erstellen on Tue, 14 Oct 2008 19:27:47 GMT]]></title><description><![CDATA[<p>redbomber schrieb:</p>
<blockquote>
<p>Wie kann ich dann in dem Header den Array initialisieren. In allen tutorials werden die Arrays nur in der *.cpp erstellt.</p>
</blockquote>
<p>Eigentlich gleich wie in der CPP-Datei. Wenn du meinst, wie innerhalb einer Klasse, dann ist das ein bisschen mühsamer, da man dort keine Initialisierungsliste benutzen kann.</p>
<pre><code class="language-cpp">class MyClass
{
    int Array[43]; // Dimension angeben
    MyClass();
};

MyClass::MyClass()
{
    // Hier müsste man die Elemente einzeln zuweisen, Initialisierungsliste geht nicht
}
</code></pre>
<p>Aber ich würde vorläufig auch mit den STL-Containern arbeiten, vor allem wenn man die Array-Grösse zur Laufzeit ändern will. Für statische Array-Wrapper, die komfortabel zu handhaben sind, gibt es <code>std::tr1::array</code> oder <code>boost::array</code> .</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1598996</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1598996</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 14 Oct 2008 19:27:47 GMT</pubDate></item><item><title><![CDATA[Reply to Array in Klasse erstellen on Wed, 15 Oct 2008 06:39:57 GMT]]></title><description><![CDATA[<p>redbomber schrieb:</p>
<blockquote>
<p>...Ich werde jetzt erst einmal der Array auch durch einen Vektor ersetzen.<br />
Damit ich mal etwas weiter komme....</p>
</blockquote>
<p>Das klingt nach Not-/Übergangslösung - dabei ist es die vernünftige/sichere/gute/... Standardlösng, von der nur im begründeten Einzelfall abgewichen werden sollte. Genau dafür ist vector da (und es ist genauso Bestandteil des Standards wie Arrays).</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599113</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599113</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 15 Oct 2008 06:39:57 GMT</pubDate></item><item><title><![CDATA[Reply to Array in Klasse erstellen on Wed, 15 Oct 2008 10:20:51 GMT]]></title><description><![CDATA[<p>Aber der Zugriff wird doch sicher um einiges langsamer sein?</p>
<p>Mir geht es darum, den Algorithmus den ich implementieren Möchte erzeugt verschiedene Objekte der Klasse Node. Diese werden erzeugt und können auch wieder gelöscht werden.</p>
<p>Bevor ich auf einen solchen Node zugreife muss ich immer erst checken ob diese existiert. Dies wollte ich mit einem bool[] realisieren.</p>
<p>Wenn ich das ganze allerdings auch mit einem vector&lt;bool&gt; hinbekomme dann ist es umso besser.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599232</guid><dc:creator><![CDATA[redbomber]]></dc:creator><pubDate>Wed, 15 Oct 2008 10:20:51 GMT</pubDate></item><item><title><![CDATA[Reply to Array in Klasse erstellen on Wed, 15 Oct 2008 10:29:11 GMT]]></title><description><![CDATA[<p>redbomber schrieb:</p>
<blockquote>
<p>Aber der Zugriff wird doch sicher um einiges langsamer sein?</p>
</blockquote>
<p>Nicht wirklich. Voraussetzung ist aber, dass man im Release-Mode übersetzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599243</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Wed, 15 Oct 2008 10:29:11 GMT</pubDate></item><item><title><![CDATA[Reply to Array in Klasse erstellen on Wed, 15 Oct 2008 12:07:52 GMT]]></title><description><![CDATA[<p>redbomber schrieb:</p>
<blockquote>
<p>Aber der Zugriff wird doch sicher um einiges langsamer sein?...</p>
</blockquote>
<p>1.) Nein.<br />
Der Zugriff über den operator[] darf zwar eine Überlaufprüfung beinhalten, muss es aber nicht (und hat es in den mir bekannten Implementierungen mindestens in der Releaseversion auch nicht). Auch<br />
ansonsten ist schon durch zahllose (hier diskutierte) Messungen nachgewiesen,<br />
dass der Zugriff über vector nicht langsamer ist als über ein Array.</p>
<p>2.) Niemals zu früh optimieren. ... das fällt unter die Kategorie &quot;Probleme zu lösen versuchen, die man nicht hat&quot;.<br />
Erst wenn wirklich Dein Programm zu langsam läuft UND der Flaschenhals nachweislich an einem bestimmten Konstrukt liegt, sollte man sich Gedanken über Alternativen machen.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1599304</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1599304</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Wed, 15 Oct 2008 12:07:52 GMT</pubDate></item></channel></rss>