<?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[Probleme beim polymorhpen Casten]]></title><description><![CDATA[<p>Mein Programm ist ein Raytracer aber das ist für dieses Problem irrelevant:</p>
<p>Hi ich eine Klasse SmoothTriangle die einen Pointer auf die Klasse Shader hat.<br />
Shader ist selber nicht instanzierbar sondern nur eine Vaterklasse für andere Shader.</p>
<p>Shader &lt;- Watershader &lt;- Oceanshader usw...</p>
<p>nun gibt es einen besonderen Shader (Displacement Shader) der total anders ist als alle anderen. Den muss ich gesondert ansprechen. Die Methode fake macht nichts, soll nur Zeigen das es nicht geht. getMagicNumber() kann jeder Shader.</p>
<pre><code class="language-cpp">class SmoothTriangle
{
 protected:
 Shader* m_shader;
 //stuff
}

DisplacementShader* slimshady = /*(DisplacementShader*)*/ reinterpret_cast&lt;DisplacementShader*&gt; (m_shader);
std::cout &lt;&lt; slimshady-&gt;getMagicNumber(); // kann jeder Shader, geht
slimshady-&gt;fake(); //kann nur der Displacement Shader geht nicht
</code></pre>
<p>Das gibt den folgenden Fehler zurück. Was kann ich da machen?</p>
<pre><code>SmoothTriangle.o: In function `SmoothTriangle::displace(float)':
SmoothTriangle.cxx:(.text+0x273): undefined reference to `DisplacementShader::fake()'
collect2: ld gab 1 als Ende-Status zurück
make: *** [MicroTrace] Fehler 1
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/230816/probleme-beim-polymorhpen-casten</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 03:54:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/230816.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 02 Jan 2009 14:18:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme beim polymorhpen Casten on Fri, 02 Jan 2009 14:20:08 GMT]]></title><description><![CDATA[<p>Mein Programm ist ein Raytracer aber das ist für dieses Problem irrelevant:</p>
<p>Hi ich eine Klasse SmoothTriangle die einen Pointer auf die Klasse Shader hat.<br />
Shader ist selber nicht instanzierbar sondern nur eine Vaterklasse für andere Shader.</p>
<p>Shader &lt;- Watershader &lt;- Oceanshader usw...</p>
<p>nun gibt es einen besonderen Shader (Displacement Shader) der total anders ist als alle anderen. Den muss ich gesondert ansprechen. Die Methode fake macht nichts, soll nur Zeigen das es nicht geht. getMagicNumber() kann jeder Shader.</p>
<pre><code class="language-cpp">class SmoothTriangle
{
 protected:
 Shader* m_shader;
 //stuff
}

DisplacementShader* slimshady = /*(DisplacementShader*)*/ reinterpret_cast&lt;DisplacementShader*&gt; (m_shader);
std::cout &lt;&lt; slimshady-&gt;getMagicNumber(); // kann jeder Shader, geht
slimshady-&gt;fake(); //kann nur der Displacement Shader geht nicht
</code></pre>
<p>Das gibt den folgenden Fehler zurück. Was kann ich da machen?</p>
<pre><code>SmoothTriangle.o: In function `SmoothTriangle::displace(float)':
SmoothTriangle.cxx:(.text+0x273): undefined reference to `DisplacementShader::fake()'
collect2: ld gab 1 als Ende-Status zurück
make: *** [MicroTrace] Fehler 1
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1638358</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1638358</guid><dc:creator><![CDATA[rohezal]]></dc:creator><pubDate>Fri, 02 Jan 2009 14:20:08 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme beim polymorhpen Casten on Fri, 02 Jan 2009 14:30:20 GMT]]></title><description><![CDATA[<p>rohezal schrieb:</p>
<blockquote>
<pre><code class="language-cpp">DisplacementShader* slimshady = /*(DisplacementShader*)*/ reinterpret_cast&lt;DisplacementShader*&gt; (m_shader);
</code></pre>
</blockquote>
<p>Sehr gefährlich, was du hier machst. Nimm einen <code>static_cast</code> , wenn du weisst, dass <code>m_shader</code> auf ein <code>DisplacementShader</code> zeigt und <code>DisplacementShader</code> und alle Basisklassen nur einfache Vererbung verwenden. Ansonsten nimm einen <code>dynamic_cast</code> . Der <code>dynamic_cast</code> ist genau dafür gedacht.</p>
<p>Zu deinem Problem:<br />
SmoothTriangle.o: In function <code>SmoothTriangle::displace(float)': SmoothTriangle.cxx:(.text+0x273): **undefined reference to</code>DisplacementShader::fake()'**<br />
Die Methode <code>fake</code> ist nicht implementiert. Sie ist deklariert aber nicht definiert.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1638373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1638373</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 02 Jan 2009 14:30:20 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme beim polymorhpen Casten on Fri, 02 Jan 2009 14:54:14 GMT]]></title><description><![CDATA[<p>Danke für die Hilfe, ich hab den reinterpred nur reingenommen weil static nicht ging . Die Funktion ist implementiert...</p>
<p>oder mach ich da was falsch?</p>
<pre><code class="language-cpp">void DisplacementShader::fake()
{
    int i = 1;
}

float DisplacementShader::heightMapPoint(float u, float v)
{
    Vec3f color = m_displacmentmap-&gt;getUV(u,v);
    return((color[0] - 0.5f) * 2);
}
</code></pre>
<p>Fuck könnte sein das in der make file vergessen habe zu sagen das Diplacement.cxx compilen soll. Nachschaut...</p>
<p>EDIT: Jo daran lags^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1638390</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1638390</guid><dc:creator><![CDATA[rohezal]]></dc:creator><pubDate>Fri, 02 Jan 2009 14:54:14 GMT</pubDate></item></channel></rss>