<?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[unaufgelöste externe Symbole - weiß nicht woher]]></title><description><![CDATA[<p>Hi zusammen!</p>
<p>Schon voller Freude, dass mein Programm endlich fehlerfrei kompiliert wird, habe ich nun folgendes Problem beim Linken:</p>
<pre><code>1&gt;life.obj : error LNK2001: Nicht aufgelöstes externes Symbol &quot;&quot;protected: static enum Life::PATTERN Life::pattern&quot; (?pattern@Life@@1W4PATTERN@1@A)&quot;.
1&gt;pattern.obj : error LNK2001: Nicht aufgelöstes externes Symbol &quot;&quot;protected: static enum Life::PATTERN Life::pattern&quot; (?pattern@Life@@1W4PATTERN@1@A)&quot;.
</code></pre>
<p>Kurz zum Aufbau:<br />
Ich habe eine Basisklasse &quot;Life&quot; und davon eine abgeleitete Klasse &quot;Pattern&quot;.<br />
In der Klasse &quot;Pattern&quot; will ich ohne Instanz der Basisklasse auf gewisse Dinge in der Basisklasse zugreifen können, daher habe ich diese als static deklariert.</p>
<p>Der zusammengekürzte Code, der relevant sein dürfte:</p>
<p><strong>life.h</strong></p>
<pre><code class="language-cpp">class Life
{
public:
	enum MODE { /*...*/ };
	enum PATTERN { /*...*/ };

protected:
	static PATTERN pattern;
};
</code></pre>
<p><strong>pattern.cpp</strong></p>
<pre><code class="language-cpp">void Pattern::loadPatternToVec(std::vector&lt;std::vector&lt;bool&gt;&gt; &amp;f)
{
	//mode wurde in der Basisklasse deklariert, PT_BLINKER befindet sich in enum PATTERN
	if(pattern==PT_BLINKER)
	{ /*...*/ }
	/*...*/
}
</code></pre>
<p>Das sollte ausreichen, hoffe ich. Was mir noch etwas Kopfzerbrechen bereitet im Moment -&gt; Ohne static (und dann natürlich mit einer Instanz der Basisklasse), bekomme ich beim Kompilieren schon den Fehler, dass ich auf die Objekte, die protected sind, nicht zugreifen kann?!</p>
<p>EDIT: Wenn ich die protected Objekte public mache, funktioniert alles! Allerdings will ich das nicht.</p>
<p>Ich hoffe, mir kann da wer helfen.<br />
Grüße,<br />
Langi</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/276109/unaufgelöste-externe-symbole-weiß-nicht-woher</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 13:30:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/276109.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 27 Oct 2010 08:27:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to unaufgelöste externe Symbole - weiß nicht woher on Wed, 27 Oct 2010 08:35:25 GMT]]></title><description><![CDATA[<p>Hi zusammen!</p>
<p>Schon voller Freude, dass mein Programm endlich fehlerfrei kompiliert wird, habe ich nun folgendes Problem beim Linken:</p>
<pre><code>1&gt;life.obj : error LNK2001: Nicht aufgelöstes externes Symbol &quot;&quot;protected: static enum Life::PATTERN Life::pattern&quot; (?pattern@Life@@1W4PATTERN@1@A)&quot;.
1&gt;pattern.obj : error LNK2001: Nicht aufgelöstes externes Symbol &quot;&quot;protected: static enum Life::PATTERN Life::pattern&quot; (?pattern@Life@@1W4PATTERN@1@A)&quot;.
</code></pre>
<p>Kurz zum Aufbau:<br />
Ich habe eine Basisklasse &quot;Life&quot; und davon eine abgeleitete Klasse &quot;Pattern&quot;.<br />
In der Klasse &quot;Pattern&quot; will ich ohne Instanz der Basisklasse auf gewisse Dinge in der Basisklasse zugreifen können, daher habe ich diese als static deklariert.</p>
<p>Der zusammengekürzte Code, der relevant sein dürfte:</p>
<p><strong>life.h</strong></p>
<pre><code class="language-cpp">class Life
{
public:
	enum MODE { /*...*/ };
	enum PATTERN { /*...*/ };

protected:
	static PATTERN pattern;
};
</code></pre>
<p><strong>pattern.cpp</strong></p>
<pre><code class="language-cpp">void Pattern::loadPatternToVec(std::vector&lt;std::vector&lt;bool&gt;&gt; &amp;f)
{
	//mode wurde in der Basisklasse deklariert, PT_BLINKER befindet sich in enum PATTERN
	if(pattern==PT_BLINKER)
	{ /*...*/ }
	/*...*/
}
</code></pre>
<p>Das sollte ausreichen, hoffe ich. Was mir noch etwas Kopfzerbrechen bereitet im Moment -&gt; Ohne static (und dann natürlich mit einer Instanz der Basisklasse), bekomme ich beim Kompilieren schon den Fehler, dass ich auf die Objekte, die protected sind, nicht zugreifen kann?!</p>
<p>EDIT: Wenn ich die protected Objekte public mache, funktioniert alles! Allerdings will ich das nicht.</p>
<p>Ich hoffe, mir kann da wer helfen.<br />
Grüße,<br />
Langi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1971275</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1971275</guid><dc:creator><![CDATA[Langi]]></dc:creator><pubDate>Wed, 27 Oct 2010 08:35:25 GMT</pubDate></item><item><title><![CDATA[Reply to unaufgelöste externe Symbole - weiß nicht woher on Wed, 27 Oct 2010 08:44:13 GMT]]></title><description><![CDATA[<p>Du brauchst noch irgendwo ein</p>
<pre><code class="language-cpp">Life::PATTERN LIFE::pattern (= ...) ;
</code></pre>
<p>Deine anderen Probleme versteh ich nicht ganz. Zeig vielelicht mal ein Beispiel, dass nicht so funktioniert wie du möchtest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1971286</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1971286</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Wed, 27 Oct 2010 08:44:13 GMT</pubDate></item><item><title><![CDATA[Reply to unaufgelöste externe Symbole - weiß nicht woher on Wed, 27 Oct 2010 09:02:41 GMT]]></title><description><![CDATA[<p>So, jetzt ists mal wieder so weit, dass ich komplett auf der Leitung stehe. Was meinst du mit &quot;irgendwo&quot;? Ich soll dem Life::pattern <em>irgendwo</em> einen Wert zuweisen?</p>
<p>Ich habe eigentlich kein anderes Problem, sondern nur eine Alternative, die auch nicht funktioniert <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>
<pre><code class="language-cpp">class Life
{
protected:
	PATTERN pattern;
};
</code></pre>
<pre><code class="language-cpp">void Pattern::loadPatternToVec(std::vector&lt;std::vector&lt;bool&gt;&gt; &amp;f)
{
	Life l;
	if(l.pattern) { /*...*/ }
}
</code></pre>
<p>Daraus resultiert folgende Fehlermeldung:</p>
<pre><code>error C2248: &quot;Life::pattern&quot;: Kein Zugriff auf private Member, dessen Deklaration in der Life-Klasse erfolgte.
1&gt;          c:\entwicklung\life.h(46): Siehe Deklaration von 'Life::pattern'
1&gt;          c:\entwicklung\life.h(14): Siehe Deklaration von 'Life'
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1971295</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1971295</guid><dc:creator><![CDATA[Langi]]></dc:creator><pubDate>Wed, 27 Oct 2010 09:02:41 GMT</pubDate></item><item><title><![CDATA[Reply to unaufgelöste externe Symbole - weiß nicht woher on Wed, 27 Oct 2010 09:16:22 GMT]]></title><description><![CDATA[<p>Das</p>
<pre><code class="language-cpp">static PATTERN pattern;
</code></pre>
<p>in der Klassendefinition ist keine Definition von <code>pattern</code> , sondern nur eine Deklaration. Daher musst du irgendwo die Variable (z.B. in life.cpp) noch definieren. Sonst meckert der Linker, dass es das pattern gar nicht gibt.</p>
<p>Auf protected Member können erbende Klassen über einen Zeiger oder eine Referenz einer abgeleiteten Klasse zugreifen. Also geht nur</p>
<pre><code class="language-cpp">void Pattern::loadPatternToVec(std::vector&lt;std::vector&lt;bool&gt;&gt; &amp;f)
{
    Pattern l;
    if(l.pattern) { /*...*/ }
}
</code></pre>
<p>Willst du nicht vielleicht aber eigentlich</p>
<pre><code class="language-cpp">void Pattern::loadPatternToVec(std::vector&lt;std::vector&lt;bool&gt;&gt; &amp;f)
{
    if(this-&gt;pattern) { /*...*/ }  // oder einfach if(pattern)
}
</code></pre>
<p>?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1971302</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1971302</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Wed, 27 Oct 2010 09:16:22 GMT</pubDate></item><item><title><![CDATA[Reply to unaufgelöste externe Symbole - weiß nicht woher on Wed, 27 Oct 2010 09:17:23 GMT]]></title><description><![CDATA[<p>In der Header Datei darfst du nur Integer Konstanten deklarieren, die Definition erfolgt in der Implementationsdatei (.cpp).</p>
<p>Header Datei</p>
<pre><code class="language-cpp">class MyClass
{
   static const double SomeConst;
};
</code></pre>
<p>Implementationsdatei</p>
<pre><code class="language-cpp">#include &quot;MyClass.h&quot;

static MyClass::SomeConst = 123.45;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1971303</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1971303</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Wed, 27 Oct 2010 09:17:23 GMT</pubDate></item><item><title><![CDATA[Reply to unaufgelöste externe Symbole - weiß nicht woher on Wed, 27 Oct 2010 09:39:23 GMT]]></title><description><![CDATA[<p>Ahhh, jetzt hab ichs verstanden <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="🙂"
    /><br />
Ich habs jetzt über den this-Zeiger gelöst. Ist zwar immer noch nicht 100%ig so wie ichs will, aber <strong>diese</strong> Frage ist damit zumindest gelöst. Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1971312</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1971312</guid><dc:creator><![CDATA[Langi]]></dc:creator><pubDate>Wed, 27 Oct 2010 09:39:23 GMT</pubDate></item></channel></rss>