<?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[[Anfänger] Arrays in Klassen]]></title><description><![CDATA[<p>Hallo</p>
<p>ich versuche gerade eine Klasse zu bauen.<br />
In dieser Klasse gibt es einige (konstante) Arrays z.B.:</p>
<pre><code class="language-cpp">float t05N2[] = {4, 8, 12.5, 18.5, 27, 38.3, 54.3, 77, 109, 146, 187, 239, 305, 390, 498, 635};
float aN2[] = {1.2599, 1, 0.8618, 0.7562, 0.662, 0.5043, 0.441, 0.4, 0.375, 0.35, 0.3295, 0.3065, 0.2835, 0.261, 0.248, 0.2327};
float bN2[] = {0.505, 0.6514, 0.7222, 0.7825, 0.8126, 0.8434, 0.8693, 0.891, 0.9092, 0.9222, 0.9319, 0.9403, 0.9477, 0.9544, 0.9602, 0.9653};
</code></pre>
<p>Wenn ich die Grundlagen richtig verstanden habe gehören Variablendeklarationen in die header-Datei.</p>
<p>Wenn ich aber diese Deklaration in die header-Datei packe bekomme ich folgenden Fehler:</p>
<pre><code>zlh16.h|20|error: a brace-enclosed initializer is not allowed here before '{' token|
zlh16.h|20|error: ISO C++ forbids initialization of member `t05N2'|
zlh16.h|20|error: making `t05N2' static|
zlh16.h|20|error: invalid in-class initialization of static data member of non-integral type `float[0u]'|
</code></pre>
<p>OK, Tante google sagt mir das es halt verboten ist, nicht int Typen zu verwenden, und das man das so nicht macht. Eine Lösung gefunden habe ich aber nicht.</p>
<p>Ich hab dann einfach die Variablen in den Konstruktor gepackt. Das geht.<br />
Aber wie schon oben geschrieben, dachte ich das sowas eigendlich in den Header muß.</p>
<p>Wo denke ich falsch?</p>
<p>danke</p>
<p>Christian</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/234148/anfänger-arrays-in-klassen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 11:55:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/234148.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 13 Feb 2009 18:12:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [Anfänger] Arrays in Klassen on Fri, 13 Feb 2009 18:12:16 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>ich versuche gerade eine Klasse zu bauen.<br />
In dieser Klasse gibt es einige (konstante) Arrays z.B.:</p>
<pre><code class="language-cpp">float t05N2[] = {4, 8, 12.5, 18.5, 27, 38.3, 54.3, 77, 109, 146, 187, 239, 305, 390, 498, 635};
float aN2[] = {1.2599, 1, 0.8618, 0.7562, 0.662, 0.5043, 0.441, 0.4, 0.375, 0.35, 0.3295, 0.3065, 0.2835, 0.261, 0.248, 0.2327};
float bN2[] = {0.505, 0.6514, 0.7222, 0.7825, 0.8126, 0.8434, 0.8693, 0.891, 0.9092, 0.9222, 0.9319, 0.9403, 0.9477, 0.9544, 0.9602, 0.9653};
</code></pre>
<p>Wenn ich die Grundlagen richtig verstanden habe gehören Variablendeklarationen in die header-Datei.</p>
<p>Wenn ich aber diese Deklaration in die header-Datei packe bekomme ich folgenden Fehler:</p>
<pre><code>zlh16.h|20|error: a brace-enclosed initializer is not allowed here before '{' token|
zlh16.h|20|error: ISO C++ forbids initialization of member `t05N2'|
zlh16.h|20|error: making `t05N2' static|
zlh16.h|20|error: invalid in-class initialization of static data member of non-integral type `float[0u]'|
</code></pre>
<p>OK, Tante google sagt mir das es halt verboten ist, nicht int Typen zu verwenden, und das man das so nicht macht. Eine Lösung gefunden habe ich aber nicht.</p>
<p>Ich hab dann einfach die Variablen in den Konstruktor gepackt. Das geht.<br />
Aber wie schon oben geschrieben, dachte ich das sowas eigendlich in den Header muß.</p>
<p>Wo denke ich falsch?</p>
<p>danke</p>
<p>Christian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663376</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663376</guid><dc:creator><![CDATA[nordlichtHH]]></dc:creator><pubDate>Fri, 13 Feb 2009 18:12:16 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Arrays in Klassen on Fri, 13 Feb 2009 18:15:03 GMT]]></title><description><![CDATA[<p>Du kannst die Array-Initialisierungsliste bei Arrays, die Member einer Klasse sind, nicht verwenden. Du müsstest die Werte also nachträglich zuweisen.</p>
<p>Im neuen Standard sollte das aber möglich sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663378</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663378</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 13 Feb 2009 18:15:03 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Arrays in Klassen on Fri, 13 Feb 2009 22:52:41 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>und wie würde das aussehen?<br />
Was muß ich jetzt in den Header machen und was in den Code? So wie ich es jetzt mache funktioniert es, mit der Deklaration mit Werten in Konstruktor, aber ich will mir gleich beim Erlernen den richtigen Stil angewöhnen. Später abgewöhnen ist so unendlich schwer...</p>
<p>gruss</p>
<p>Christian</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663533</guid><dc:creator><![CDATA[nordlichtHH]]></dc:creator><pubDate>Fri, 13 Feb 2009 22:52:41 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Arrays in Klassen on Fri, 13 Feb 2009 23:06:49 GMT]]></title><description><![CDATA[<p>Normalerweise würde man hier einen Container, ala <a href="http://www.cplusplus.com/reference/stl/vector/" rel="nofollow">std::vector</a>, oder <a href="http://www.boost.org/doc/libs/1_37_0/doc/html/array.html" rel="nofollow">boost::array</a> nehmen.</p>
<p>Ansonsten kommst du nicht drum herum die Grösse im Header anzugeben und dann einfach im ctor mit einer Schleife zu füllen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663539</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663539</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 13 Feb 2009 23:06:49 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Arrays in Klassen on Fri, 13 Feb 2009 23:09:57 GMT]]></title><description><![CDATA[<p>So wie du es jetzt machst, ist es aber nur lokal. Die Arrays existieren nach dem Konstruktor nicht mehr.</p>
<p>Der richtige Stil ist, gar keine Arrays zu benutzen. <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>
<p>Das mag zwar blöd klingen, ist aber wahr. Viel besser zu bedienen sind die STL-Container, bei denen man z.B. auch einfach Elemente anhängen kann. Zudem kann man dank Assertions die Fehlerquellen einschränken und das Debugging erleichtern. Bei den Artikeln in diesem Forum gibt es einige Beiträge dazu.</p>
<p>Allerdings kommt es auch relativ selten vor, dass man die Werte &quot;hardcoded&quot; als Literale im Code stehen hat. Liest du die nicht von einer Datei ein? Ansonsten könntest du vielleicht mal Boost.Assign ( <code>list_of()</code> ) anschauen, da hat man eine Art Initialisierungslisten für Container.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663540</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663540</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 13 Feb 2009 23:09:57 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Arrays in Klassen on Fri, 13 Feb 2009 23:12:17 GMT]]></title><description><![CDATA[<p>deklariere in der *.h und definiere in der *.cpp<br />
in der *.cpp kannste auch gleich initialisieren.<br />
klappt das?<br />
wenn ja, dann ist es auch die nächsten zehn jahre guter stil. denn es ist recht aufgeräumt und optimal schnell und selbst wenn der neue standard das im header erlaubt, brauchts noch 10 jahre, bis die daten aus dem header bei mehrfacher inklusion bei den meisten compilern nur einmal in der ausführbaren datei landen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663542</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663542</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 13 Feb 2009 23:12:17 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Arrays in Klassen on Fri, 13 Feb 2009 23:56:45 GMT]]></title><description><![CDATA[<p>Das würde dann auf sowas hinauslaufen:</p>
<pre><code class="language-cpp">// ===== Header =====
class Class
{
	static int Array[];
};

// ===== Implementierungsdatei =====
int Class::Array[3] = {1, 2, 4};
</code></pre>
<p>Aber dazu hätte ich noch eine Frage: Wieso muss man im Header die Dimension nicht angeben? Zum Typ des Arrays gehört die doch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663548</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Fri, 13 Feb 2009 23:56:45 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Arrays in Klassen on Fri, 13 Feb 2009 23:59:07 GMT]]></title><description><![CDATA[<p>Wiel die ein statisches Array keinen Einfluss auf den Speicherverbrauch der Klasse hat. Sie muss daher auch nicht wissen, wie gross das Array schlussendlich ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663549</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Fri, 13 Feb 2009 23:59:07 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Arrays in Klassen on Sat, 14 Feb 2009 00:14:50 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Aber dazu hätte ich noch eine Frage: Wieso muss man im Header die Dimension nicht angeben? Zum Typ des Arrays gehört die doch?</p>
</blockquote>
<p>ich wäre nie auf die idee gekommen, die Dimension hier nicht anzugeben.<br />
für nen compiler ist das hier genauso wie eine array-übergabe bei einem funktionsaufruf. die klasse braucht nur die adresse des ersten elements zu kennen. damit klappt alles.<br />
die größe wäre nur nötig, um indexüberschreitungen zu erkennen, und das macht c++ nicht von allein. so gesehen ist es logisch, daß die größe den compiler nicht juckt. wie bei funktionen auch.<br />
ich halte es gleichermaßen für möglichz, daß der standard es erlaubt wie daß er es nicht erlaubt und der compilerbauer einfach logisch fortgesetzt hat. keine ahnung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663554</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663554</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 14 Feb 2009 00:14:50 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Arrays in Klassen on Sat, 14 Feb 2009 01:30:06 GMT]]></title><description><![CDATA[<p>Die Frage stellte ich mir, als ich mir eine Situation überlegte, in der die Grösse des Arrays relevant wäre. Das wäre beispielsweise <code>sizeof</code> oder folgendes Funktionstemplate:</p>
<pre><code class="language-cpp">template &lt;size_t S&gt;
void Function(int (&amp;Array)[S])
{
	// ...
}
</code></pre>
<p>Ich dachte, dies würde kompilieren, wenn die Dimension nicht angegeben wäre, und fragte mich deshalb, weil diese ja erst zur Linkzeit bekannt wäre. Ich habe mich hier jedoch geirrt, ohne Grössenangabe gibt es einen Compilerfehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663567</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 14 Feb 2009 01:30:06 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Arrays in Klassen on Sat, 14 Feb 2009 02:00:23 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>So wie du es jetzt machst, ist es aber nur lokal. Die Arrays existieren nach dem Konstruktor nicht mehr.</p>
</blockquote>
<p>Nach dem Konstruktor nicht mehr oder nach beendigung des Objekts? Daten die der Konstruktor erstellt bestehen doch über die gesammte Objektlebensdauer, oder?</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Allerdings kommt es auch relativ selten vor, dass man die Werte &quot;hardcoded&quot; als Literale im Code stehen hat. Liest du die nicht von einer Datei ein?</p>
</blockquote>
<p>Warum sollte ich? Das sind Werte die feststehen... So wie die Halbwertzeit von Radioaktiven Stoffen. Das ist sozusagen von der Natur &quot;hardcoded&quot;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663574</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663574</guid><dc:creator><![CDATA[nordlichtHH]]></dc:creator><pubDate>Sat, 14 Feb 2009 02:00:23 GMT</pubDate></item><item><title><![CDATA[Reply to [Anfänger] Arrays in Klassen on Sat, 14 Feb 2009 02:11:07 GMT]]></title><description><![CDATA[<p>nordlichtHH schrieb:</p>
<blockquote>
<p>Nach dem Konstruktor nicht mehr oder nach beendigung des Objekts? Daten die der Konstruktor erstellt bestehen doch über die gesammte Objektlebensdauer, oder?</p>
</blockquote>
<p>Nicht, wenn ihre Deklaration im Konstruktor selber erfolgt. Das gilt nur für Member der Klasse.</p>
<p>nordlichtHH schrieb:</p>
<blockquote>
<p>Warum sollte ich? Das sind Werte die feststehen... So wie die Halbwertzeit von Radioaktiven Stoffen. Das ist sozusagen von der Natur &quot;hardcoded&quot;</p>
</blockquote>
<p>Gut, wenn es wirklich solche Konstanten sind, kannst du es schon so lassen. Aber da die Werte eigentlich nicht für jede Instanz kopiert werden müssen, würde ich sie auch global oder statisch (siehe mein vorheriger Beitrag) deklarieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1663577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1663577</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 14 Feb 2009 02:11:07 GMT</pubDate></item></channel></rss>