<?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[Forward Declaration]]></title><description><![CDATA[<p>Hi Leute,</p>
<p>ich habe seit einigen Wochen von Visual Studio 6.0 auf Visual Studio 8.0 umgestiegen. Und jetzt bin ich beim Portieren meiner Klassen. VS 6.0 und 8.0 haben zwei verschiedene Compiler, da die Fehlermeldung ganz unterschiedlich aussehen. Beim Portieren habe ich auf ein Problem gestossen. Der Compiler von VS 8.0 versteht keine Forward Declaration von VS 6.0, z.B.</p>
<p>in der Datei matrix.h steht</p>
<p>#include &quot;vector.h&quot;<br />
namespace imagingtools<br />
{<br />
template&lt;typename _T&gt; class MatrixNumerical : public Matrix&lt;_T&gt;<br />
{<br />
public :</p>
<p>MatrixNumerical&lt;_T&gt; operator * ( const MathVector&lt;_T&gt; &amp; r ) const<br />
{<br />
MatrixNumerical&lt;_T&gt; out;<br />
....<br />
....<br />
....<br />
return out;<br />
}</p>
<p>}; // class MatrixNumerical<br />
}; // namespace</p>
<p>in der Datei &quot;vector.h&quot; steht</p>
<p>namespace imagingtools<br />
{</p>
<p>template &lt;typename T&gt; class MatrixNumerical;</p>
<p>template &lt;typename T&gt; class MathVector : public std::vector&lt;T&gt;<br />
{</p>
<p>imagingtools::MatrixNumerical&lt;T&gt; operator * (const<br />
imagingtools::MatrixNumerical&lt;T&gt; &amp; r ) const<br />
{<br />
imagingtools::MatrixNumerical&lt;T&gt; out;<br />
....<br />
....<br />
....<br />
return out;<br />
}</p>
<p>}; // class MathVector<br />
}; // namespace</p>
<p>Und im Operator * in vector.h kommt es zu einem Fehler wie<br />
error C2027: use of undefined type 'imagingtools::MatrixNumerical&lt;T&gt;' und einer Reihe von Folgefehlern. Wie kann das sein, in VC 6.0 hatte ich damit kein Problem.</p>
<p>Vielleicht hat jemand dasselbe Problem gehabt und kann mir helfen.<br />
Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/132743/forward-declaration</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 19:04:29 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/132743.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 12 Jan 2006 18:31:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Forward Declaration on Thu, 12 Jan 2006 18:31:46 GMT]]></title><description><![CDATA[<p>Hi Leute,</p>
<p>ich habe seit einigen Wochen von Visual Studio 6.0 auf Visual Studio 8.0 umgestiegen. Und jetzt bin ich beim Portieren meiner Klassen. VS 6.0 und 8.0 haben zwei verschiedene Compiler, da die Fehlermeldung ganz unterschiedlich aussehen. Beim Portieren habe ich auf ein Problem gestossen. Der Compiler von VS 8.0 versteht keine Forward Declaration von VS 6.0, z.B.</p>
<p>in der Datei matrix.h steht</p>
<p>#include &quot;vector.h&quot;<br />
namespace imagingtools<br />
{<br />
template&lt;typename _T&gt; class MatrixNumerical : public Matrix&lt;_T&gt;<br />
{<br />
public :</p>
<p>MatrixNumerical&lt;_T&gt; operator * ( const MathVector&lt;_T&gt; &amp; r ) const<br />
{<br />
MatrixNumerical&lt;_T&gt; out;<br />
....<br />
....<br />
....<br />
return out;<br />
}</p>
<p>}; // class MatrixNumerical<br />
}; // namespace</p>
<p>in der Datei &quot;vector.h&quot; steht</p>
<p>namespace imagingtools<br />
{</p>
<p>template &lt;typename T&gt; class MatrixNumerical;</p>
<p>template &lt;typename T&gt; class MathVector : public std::vector&lt;T&gt;<br />
{</p>
<p>imagingtools::MatrixNumerical&lt;T&gt; operator * (const<br />
imagingtools::MatrixNumerical&lt;T&gt; &amp; r ) const<br />
{<br />
imagingtools::MatrixNumerical&lt;T&gt; out;<br />
....<br />
....<br />
....<br />
return out;<br />
}</p>
<p>}; // class MathVector<br />
}; // namespace</p>
<p>Und im Operator * in vector.h kommt es zu einem Fehler wie<br />
error C2027: use of undefined type 'imagingtools::MatrixNumerical&lt;T&gt;' und einer Reihe von Folgefehlern. Wie kann das sein, in VC 6.0 hatte ich damit kein Problem.</p>
<p>Vielleicht hat jemand dasselbe Problem gehabt und kann mir helfen.<br />
Danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/964868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/964868</guid><dc:creator><![CDATA[dynamo]]></dc:creator><pubDate>Thu, 12 Jan 2006 18:31:46 GMT</pubDate></item><item><title><![CDATA[Reply to Forward Declaration on Thu, 12 Jan 2006 19:39:49 GMT]]></title><description><![CDATA[<p>Wenn ich das richtig sehe (und das kann man bei fehlenden CPP-Tags und Einrückung sehr schlecht lesen!) ist zum Zeitpunkt der Instantiierung von out nicht die gesamte Templatedeklaration sichtbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/964928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/964928</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 12 Jan 2006 19:39:49 GMT</pubDate></item><item><title><![CDATA[Reply to Forward Declaration on Thu, 12 Jan 2006 20:22:05 GMT]]></title><description><![CDATA[<p>Lieber LordJaxom,</p>
<p>es fehlen keine cpp-tags. Die Implementierung muss immer in einer Header-Datei sein, da man mit den Templates arbeitet. Der Fehler tritt schon im<br />
Procedure-Kopf auf:</p>
<p>imagingtools::MatrixNumerical&lt;T&gt; operator * (<br />
const imagingtools::MatrixNumerical&lt;T&gt; &amp; r ) const</p>
]]></description><link>https://www.c-plusplus.net/forum/post/964967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/964967</guid><dc:creator><![CDATA[dynamo]]></dc:creator><pubDate>Thu, 12 Jan 2006 20:22:05 GMT</pubDate></item><item><title><![CDATA[Reply to Forward Declaration on Thu, 12 Jan 2006 20:55:30 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10483">@dynamo</a></p>
<p>doch da fehlen cpp tags.</p>
<p>beispiel für ein tag:</p>
<pre><code class="language-cpp">Das ist ein code tag!!!!!!
</code></pre>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10648">@LordJaxom</a></p>
<pre><code class="language-cpp">#include &quot;vector.h&quot;
namespace imagingtools
{
template&lt;typename _T&gt; class MatrixNumerical : public Matrix&lt;_T&gt;
{
public :

MatrixNumerical&lt;_T&gt; operator * ( const MathVector&lt;_T&gt; &amp; r ) const
{
MatrixNumerical&lt;_T&gt; out;
....
....
....
return out;
}

}; // class MatrixNumerical
}; // namespace

in der Datei &quot;vector.h&quot; steht

namespace imagingtools
{

template &lt;typename T&gt; class MatrixNumerical;

template &lt;typename T&gt; class MathVector : public std::vector&lt;T&gt;
{

imagingtools::MatrixNumerical&lt;T&gt; operator * (const
imagingtools::MatrixNumerical&lt;T&gt; &amp; r ) const
{
imagingtools::MatrixNumerical&lt;T&gt; out;
....
....
....
return out;
}

}; // class MathVector
}; // namespace
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/964987</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/964987</guid><dc:creator><![CDATA[MartinMilbret]]></dc:creator><pubDate>Thu, 12 Jan 2006 20:55:30 GMT</pubDate></item><item><title><![CDATA[Reply to Forward Declaration on Thu, 12 Jan 2006 21:20:00 GMT]]></title><description><![CDATA[<p>Danke MartinMilbret für deine Bemerckung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/965010</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/965010</guid><dc:creator><![CDATA[dynamo]]></dc:creator><pubDate>Thu, 12 Jan 2006 21:20:00 GMT</pubDate></item><item><title><![CDATA[Reply to Forward Declaration on Thu, 12 Jan 2006 21:59:59 GMT]]></title><description><![CDATA[<p>Einrückung fehlt immernoch und mein Statement bleibt bestehen: An der betroffenen Stelle ist die Template-Implementierung von out nicht verfügbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/965047</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/965047</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 12 Jan 2006 21:59:59 GMT</pubDate></item><item><title><![CDATA[Reply to Forward Declaration on Thu, 12 Jan 2006 22:17:46 GMT]]></title><description><![CDATA[<p>ok LordJaxom,</p>
<p>out sieht beispielsweise so aus:</p>
<p>imagingtools::MatrixNumerical&lt;T&gt; out( r.width(), 1, 0);</p>
]]></description><link>https://www.c-plusplus.net/forum/post/965063</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/965063</guid><dc:creator><![CDATA[dynamo]]></dc:creator><pubDate>Thu, 12 Jan 2006 22:17:46 GMT</pubDate></item><item><title><![CDATA[Reply to Forward Declaration on Fri, 13 Jan 2006 10:02:20 GMT]]></title><description><![CDATA[<p>Die Forward-Deklaration reicht aus, wenn der Compiler sich mit dem Wissen begnügen kann, DASS ein entsprechender Typ existiert - für den operator* muß er jedoch auch wissen, WIE die Klasse aufgebaut ist.</p>
<pre><code class="language-cpp">template &lt;typename T&gt; class MatrixNumerical;

template &lt;typename T&gt; class MathVector : public std::vector&lt;T&gt;
{
  //Deklaration - Forward-Angabe reicht
  MatrixNumerical&lt;T&gt; operator * (const MatrixNumerical&lt;T&gt; &amp; r ) const;
};

template&lt;typename _T&gt; class MatrixNumerical : public Matrix&lt;_T&gt;
{
public :
  MatrixNumerical&lt;_T&gt; operator * ( const MathVector&lt;_T&gt; &amp; r ) const
  {
    MatrixNumerical&lt;_T&gt; out;
    //....
    return out;
  }
};

//Definition - benötigt vollständige Typangabe
template&lt;typename T&gt;
MatrixNumerical&lt;T&gt; MathVector&lt;T&gt;::operator* (const MatrixNumerical&lt;T&gt; &amp; r ) const
{
  MatrixNumerical&lt;T&gt; out;
  //....
  return out;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/965267</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/965267</guid><dc:creator><![CDATA[CStoll (off)]]></dc:creator><pubDate>Fri, 13 Jan 2006 10:02:20 GMT</pubDate></item><item><title><![CDATA[Reply to Forward Declaration on Fri, 13 Jan 2006 17:58:50 GMT]]></title><description><![CDATA[<p>Hi CStoll (off),</p>
<p>leider funktioniert dieser Ansatz nicht. Hier hat man mit einem kleinen Problemchen zu tun. Wo es aber ist, habe ich bis jetzt leider nicht festgestellt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/965887</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/965887</guid><dc:creator><![CDATA[dynamo]]></dc:creator><pubDate>Fri, 13 Jan 2006 17:58:50 GMT</pubDate></item><item><title><![CDATA[Reply to Forward Declaration on Mon, 16 Jan 2006 07:54:15 GMT]]></title><description><![CDATA[<p>Wieso funktioniert der Ansatz denn nicht? (kleiner Tip: Du mußt deine Member nicht unbedingt in der Klassendeklaration definieren, sondern kannst das auch später erledigen, wenn alle benötigten Infos vorliegen)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/967675</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/967675</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 16 Jan 2006 07:54:15 GMT</pubDate></item></channel></rss>