<?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[statische Klassenelement zu initialisieren funktioniert nicht [gelöst]]]></title><description><![CDATA[<p>Hiho,<br />
versuche mich grade in c++ reinzuarbeiten. Habe meine erste Klasse &quot;Person&quot; erstellt und würde gerne ein statisches Element &quot;standardPerson&quot; vom Typ Person als Datenspeicher für die Werte des leeren Konstruktors (Person()) benutzen.</p>
<p>Also z.B. bei</p>
<pre><code>Person y=Person()
</code></pre>
<p>sollen dem Objekt y die Werte des statisches Elments &quot;standardPerson&quot; zugewiesen werden.<br />
Ich hab da allerdings so menie Probleme wo und wie ich &quot;standardPerson&quot; initialisiere.</p>
<p>Direkt bei der Deklaration (im private-Bereich meiner Klasse Person) gehts nicht.<br />
Von außen über</p>
<pre><code>Person::standardPerson(bla,bla)
</code></pre>
<p>geht natürlich auch nicht, da &quot;standardPerson&quot; ja private ist.<br />
Über eine statische Funktion, die nur zum Setzen von &quot;standardPerson&quot; gedacht ist, funktionierts auch nicht, da bekomm ich von Visual Studio immer die Fehlermeldung:</p>
<blockquote>
<p>...Nicht aufgelöstes externes Symbol...1 nicht aufgelöste externe Verweise...</p>
</blockquote>
<p>was ich nich ganz nachvollziehen kann.</p>
<p>Hier mal der wichtige Code:</p>
<pre><code>class Person{
	int alter;
	string name;
	static Person standardPerson;	

public: 
	Person(int alter, string name);
	Person(int alter);
	Person();
        ...
        static void setzeStandard(int alter, string name){
		standardPerson.alter=alter;
		standardPerson.name=name;
	}
}
</code></pre>
<p>hab sufu benutzt und nichts ordentliches gefunden.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/301430/statische-klassenelement-zu-initialisieren-funktioniert-nicht-gelöst</link><generator>RSS for Node</generator><lastBuildDate>Wed, 12 Aug 2026 01:00:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/301430.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 27 Mar 2012 09:14:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to statische Klassenelement zu initialisieren funktioniert nicht [gelöst] on Wed, 28 Mar 2012 07:25:47 GMT]]></title><description><![CDATA[<p>Hiho,<br />
versuche mich grade in c++ reinzuarbeiten. Habe meine erste Klasse &quot;Person&quot; erstellt und würde gerne ein statisches Element &quot;standardPerson&quot; vom Typ Person als Datenspeicher für die Werte des leeren Konstruktors (Person()) benutzen.</p>
<p>Also z.B. bei</p>
<pre><code>Person y=Person()
</code></pre>
<p>sollen dem Objekt y die Werte des statisches Elments &quot;standardPerson&quot; zugewiesen werden.<br />
Ich hab da allerdings so menie Probleme wo und wie ich &quot;standardPerson&quot; initialisiere.</p>
<p>Direkt bei der Deklaration (im private-Bereich meiner Klasse Person) gehts nicht.<br />
Von außen über</p>
<pre><code>Person::standardPerson(bla,bla)
</code></pre>
<p>geht natürlich auch nicht, da &quot;standardPerson&quot; ja private ist.<br />
Über eine statische Funktion, die nur zum Setzen von &quot;standardPerson&quot; gedacht ist, funktionierts auch nicht, da bekomm ich von Visual Studio immer die Fehlermeldung:</p>
<blockquote>
<p>...Nicht aufgelöstes externes Symbol...1 nicht aufgelöste externe Verweise...</p>
</blockquote>
<p>was ich nich ganz nachvollziehen kann.</p>
<p>Hier mal der wichtige Code:</p>
<pre><code>class Person{
	int alter;
	string name;
	static Person standardPerson;	

public: 
	Person(int alter, string name);
	Person(int alter);
	Person();
        ...
        static void setzeStandard(int alter, string name){
		standardPerson.alter=alter;
		standardPerson.name=name;
	}
}
</code></pre>
<p>hab sufu benutzt und nichts ordentliches gefunden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2195784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195784</guid><dc:creator><![CDATA[butterbemme]]></dc:creator><pubDate>Wed, 28 Mar 2012 07:25:47 GMT</pubDate></item><item><title><![CDATA[Reply to statische Klassenelement zu initialisieren funktioniert nicht [gelöst] on Tue, 27 Mar 2012 09:22:07 GMT]]></title><description><![CDATA[<p>Die <code>static Person standardPerson</code> wird bei dir nur deklariert, aber nirgends definiert. Schreib einfach in der .cpp folgendes:</p>
<pre><code class="language-cpp">Person Person::standardPerson(25, &quot;Hugo&quot;);
</code></pre>
<p>Du kannst übrigens die Attribute ganz einfach in der Initialisierungsliste des Konstruktors mit den Standardwerten belegen, dazu brauchts eigentlich keine &quot;standardPerson&quot;. Schau dir außerdem mal default-Argumente für Funktionen an (geht auch bei Konstruktoren), damit kannst du evtl. die Zahl deiner Konstruktoren reduzieren. Ferner solltest du beachten, dass mit deinen aktuellen Konstruktoren die implizite Umwandlung von ints in Personen möglich ist:</p>
<pre><code class="language-cpp">void f(Person p);

int main()
{
  Person p1 = 25; //Hä??
  f(74); //ruft f(Person) auf =&gt; Hä?????
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2195785</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195785</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 27 Mar 2012 09:22:07 GMT</pubDate></item><item><title><![CDATA[Reply to statische Klassenelement zu initialisieren funktioniert nicht [gelöst] on Tue, 27 Mar 2012 09:22:33 GMT]]></title><description><![CDATA[<p>Du musst deine statische Variable irgendwo definieren (das ist der Klasse ist nur eine Deklaration). D.h. du musst in irgendeine .cpp Datei</p>
<pre><code class="language-cpp">Person Person::standardPerson;
</code></pre>
<p>schreiben. Dort kannst du deine Person auch initialisieren:</p>
<pre><code class="language-cpp">Person Person::standardPerson(1, &quot;Darkwing&quot;);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2195786</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195786</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Tue, 27 Mar 2012 09:22:33 GMT</pubDate></item><item><title><![CDATA[Reply to statische Klassenelement zu initialisieren funktioniert nicht [gelöst] on Tue, 27 Mar 2012 10:13:28 GMT]]></title><description><![CDATA[<p>Danke für eure Antworten. Jetzt hats funktioniert.</p>
<p>pumuckl schrieb:</p>
<blockquote>
<p>... Ferner solltest du beachten, dass mit deinen aktuellen Konstruktoren die implizite Umwandlung von ints in Personen möglich ist:</p>
<pre><code class="language-cpp">void f(Person p);

int main()
{
  Person p1 = 25; //Hä??
  f(74); //ruft f(Person) auf =&gt; Hä?????
}
</code></pre>
</blockquote>
<p>Hm, ich verstehe nich ganz, warum meine Konstruktoren so eine Umwandlung möglich machen und wie kann ich sowas verhindern?</p>
<p>edit: Mit default-Werten für Funktionsparameter bin ich vertraut. Ich lese hier grade ein C++ Buch bei dem die Version mit dem statischen Standardobjekt vorgestellt wurde und ich wollts einmal nachprogrammieren, damit ichs mal gesehen hab. Ich find die Art selber nicht sonderlich schön bzw umständlich, da man, wie schon von euch erwähnt, ja im leeren Konstruktor einfach die Elemente mit festen Standardwerten initialisieren kann</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2195790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195790</guid><dc:creator><![CDATA[butterbemme]]></dc:creator><pubDate>Tue, 27 Mar 2012 10:13:28 GMT</pubDate></item><item><title><![CDATA[Reply to statische Klassenelement zu initialisieren funktioniert nicht [gelöst] on Tue, 27 Mar 2012 10:13:31 GMT]]></title><description><![CDATA[<p>Weil es einen Konstruktor gibt, er einen <code>int</code> als Parameter akzeptiert. Unter der Haube wird aus</p>
<pre><code class="language-cpp">Person p = 25;
</code></pre>
<pre><code class="language-cpp">Person p = Person( 25 );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2195792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195792</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Tue, 27 Mar 2012 10:13:31 GMT</pubDate></item><item><title><![CDATA[Reply to statische Klassenelement zu initialisieren funktioniert nicht [gelöst] on Tue, 27 Mar 2012 10:28:08 GMT]]></title><description><![CDATA[<p>Okay, gut zu wissen und wie müsste mein Code aussehen damit sowas nicht vorkommt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2195796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195796</guid><dc:creator><![CDATA[butterbemme]]></dc:creator><pubDate>Tue, 27 Mar 2012 10:28:08 GMT</pubDate></item><item><title><![CDATA[Reply to statische Klassenelement zu initialisieren funktioniert nicht [gelöst] on Tue, 27 Mar 2012 10:40:32 GMT]]></title><description><![CDATA[<p>Den Konstruktor, den man ja mit nur einem Parameter aufrufen kann, einfach <code>explicit</code> machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2195799</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195799</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 27 Mar 2012 10:40:32 GMT</pubDate></item><item><title><![CDATA[Reply to statische Klassenelement zu initialisieren funktioniert nicht [gelöst] on Tue, 27 Mar 2012 11:21:29 GMT]]></title><description><![CDATA[<p>Coole Sache. Damit sind meine Fragen geklärt.<br />
Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2195808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2195808</guid><dc:creator><![CDATA[butterbemme]]></dc:creator><pubDate>Tue, 27 Mar 2012 11:21:29 GMT</pubDate></item></channel></rss>