<?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[Problem mit &amp;quot;Two-Phase look-up&amp;quot;]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe unten stehenden Code geschrieben, der unter g++ 3.0.1 anstandslos compiliert wird (auf einer HP-UX). Jetzt habe ich eine Linux-Maschine mit g++ 3.4.6, wobei die Fehlermeldung</p>
<p>sample.c: In member function 'T C2&lt;T&gt;::PROC(T)':<br />
sample.c:19: error: 'c1i' was not declared in this scope</p>
<p>Ausgegeben wird. In einem Forum nannte man mir als Hilfe, &quot;this-&gt;c1i&quot; anstelle von &quot;c1i&quot; in Zeile 19 zu verwenden. Der Grund sei, dass Version 3.4.6 die &quot;two-phase lookup rule&quot; akribischer prüft. Das hilft auch, nur muß ich diese sehr oft machen (der Code hier als Beispiel knapp zusammengefaßt). Weiterhin leuchtet es mir nicht ein, da c1i doch von C2 geerbt wird.</p>
<p>Oder mache ich etwas grundsätzlich falsch? Ich hätte gern c1i weiterhin als Variable in C2, also z.B. kein Zugriff über eine inline-Funktion.</p>
<p>Schonmal vielen Dank im Voraus!</p>
<p>Gruß<br />
Oliver</p>
<p>#include &lt;stdarg.h&gt;<br />
#include &lt;stdlib.h&gt;<br />
#include &lt;stdio.h&gt;</p>
<p>using namespace std;</p>
<p>template &lt;typename T&gt; class C1 {<br />
public:<br />
T c1i;<br />
C1() { c1i = 1.0; };<br />
~C1() { };<br />
};</p>
<p>template &lt;typename T&gt; class C2 : public C1&lt;T&gt; {<br />
public:<br />
T c2i;<br />
C2() { c2i = 1; };<br />
~C2() { };<br />
T PROC(T x) { c1i = c2i; };<br />
};</p>
<p>int main(int argc, char **argv)<br />
{<br />
C1&lt;double&gt; c1;<br />
C2&lt;double&gt; c2;</p>
<p>return EXIT_SUCCESS;<br />
}</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/170395/problem-mit-quot-two-phase-look-up-quot</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 02:45:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/170395.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 15 Jan 2007 12:04:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit &amp;quot;Two-Phase look-up&amp;quot; on Mon, 15 Jan 2007 12:04:26 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe unten stehenden Code geschrieben, der unter g++ 3.0.1 anstandslos compiliert wird (auf einer HP-UX). Jetzt habe ich eine Linux-Maschine mit g++ 3.4.6, wobei die Fehlermeldung</p>
<p>sample.c: In member function 'T C2&lt;T&gt;::PROC(T)':<br />
sample.c:19: error: 'c1i' was not declared in this scope</p>
<p>Ausgegeben wird. In einem Forum nannte man mir als Hilfe, &quot;this-&gt;c1i&quot; anstelle von &quot;c1i&quot; in Zeile 19 zu verwenden. Der Grund sei, dass Version 3.4.6 die &quot;two-phase lookup rule&quot; akribischer prüft. Das hilft auch, nur muß ich diese sehr oft machen (der Code hier als Beispiel knapp zusammengefaßt). Weiterhin leuchtet es mir nicht ein, da c1i doch von C2 geerbt wird.</p>
<p>Oder mache ich etwas grundsätzlich falsch? Ich hätte gern c1i weiterhin als Variable in C2, also z.B. kein Zugriff über eine inline-Funktion.</p>
<p>Schonmal vielen Dank im Voraus!</p>
<p>Gruß<br />
Oliver</p>
<p>#include &lt;stdarg.h&gt;<br />
#include &lt;stdlib.h&gt;<br />
#include &lt;stdio.h&gt;</p>
<p>using namespace std;</p>
<p>template &lt;typename T&gt; class C1 {<br />
public:<br />
T c1i;<br />
C1() { c1i = 1.0; };<br />
~C1() { };<br />
};</p>
<p>template &lt;typename T&gt; class C2 : public C1&lt;T&gt; {<br />
public:<br />
T c2i;<br />
C2() { c2i = 1; };<br />
~C2() { };<br />
T PROC(T x) { c1i = c2i; };<br />
};</p>
<p>int main(int argc, char **argv)<br />
{<br />
C1&lt;double&gt; c1;<br />
C2&lt;double&gt; c2;</p>
<p>return EXIT_SUCCESS;<br />
}</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210189</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210189</guid><dc:creator><![CDATA[oliver67]]></dc:creator><pubDate>Mon, 15 Jan 2007 12:04:26 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit &amp;quot;Two-Phase look-up&amp;quot; on Mon, 15 Jan 2007 12:56:48 GMT]]></title><description><![CDATA[<p>Hmm, ich sehe dein Problem nicht. Du musst this verwenden, weil du von einem Template erbst und nicht von einer konkreten Klasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210229</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Mon, 15 Jan 2007 12:56:48 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit &amp;quot;Two-Phase look-up&amp;quot; on Mon, 15 Jan 2007 13:40:58 GMT]]></title><description><![CDATA[<p>Ich weiß zwar auch nicht genau was das Problem ist, aber mit fällt nur das auf:</p>
<pre><code class="language-cpp">T PROC(T x) { c1i = c2i; };
</code></pre>
<p>Das müsste nämlich so heißen:</p>
<pre><code class="language-cpp">T PROC(T x) { C1&lt;T&gt;::c1i = c2i; };
</code></pre>
<p>Hättest du keine Template-Klassen würde das so funktionieren, aber da c1i abhängig vom T ist musst du ihn mit vollem Namen erwähnen... ( Habe mir den letzten Teil mal so zusammen gereimt und weiß nicht ob das so richtig ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> )</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1210248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1210248</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Mon, 15 Jan 2007 13:40:58 GMT</pubDate></item></channel></rss>