<?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[hilfe gcc will nicht so wie visual2003]]></title><description><![CDATA[<p>hallo, hoffe koennt helfen:</p>
<p>fuer eine template klasse vom typ:</p>
<pre><code>template&lt;class T&gt;
class CQuickCounter : public map&lt;T, U64&gt;
{
  typedef typename CQuickCounter&lt;T&gt;::const_iterator CQuickCounterIterator;
  void Print()
  {
     CQuickCounterIterator it = begin();   
  }
};
</code></pre>
<p>gcc meckert hier mit:<br />
'there are no arguments to 'begin' that depend on a template parameter .. (etc.)'</p>
<p>habe stattdessen mal CQuickCounter&lt;T&gt;::begin() versucht.<br />
schluckt gcc dann auch.</p>
<p>aber laestig das man dies vor alles schreiben muss, was von map geerbt wurde.<br />
da steht doch eigentlich schon ein Template-Parameter ueber der klassendeklaration, warum also nochmal, und wie loest man obiges eleganter !?!?</p>
<p>danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/264558/hilfe-gcc-will-nicht-so-wie-visual2003</link><generator>RSS for Node</generator><lastBuildDate>Fri, 04 Sep 2026 16:50:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/264558.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 09 Apr 2010 10:52:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to hilfe gcc will nicht so wie visual2003 on Fri, 09 Apr 2010 10:52:02 GMT]]></title><description><![CDATA[<p>hallo, hoffe koennt helfen:</p>
<p>fuer eine template klasse vom typ:</p>
<pre><code>template&lt;class T&gt;
class CQuickCounter : public map&lt;T, U64&gt;
{
  typedef typename CQuickCounter&lt;T&gt;::const_iterator CQuickCounterIterator;
  void Print()
  {
     CQuickCounterIterator it = begin();   
  }
};
</code></pre>
<p>gcc meckert hier mit:<br />
'there are no arguments to 'begin' that depend on a template parameter .. (etc.)'</p>
<p>habe stattdessen mal CQuickCounter&lt;T&gt;::begin() versucht.<br />
schluckt gcc dann auch.</p>
<p>aber laestig das man dies vor alles schreiben muss, was von map geerbt wurde.<br />
da steht doch eigentlich schon ein Template-Parameter ueber der klassendeklaration, warum also nochmal, und wie loest man obiges eleganter !?!?</p>
<p>danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1879932</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1879932</guid><dc:creator><![CDATA[pepe75]]></dc:creator><pubDate>Fri, 09 Apr 2010 10:52:02 GMT</pubDate></item><item><title><![CDATA[Reply to hilfe gcc will nicht so wie visual2003 on Fri, 09 Apr 2010 11:07:34 GMT]]></title><description><![CDATA[<p>hola</p>
<p>was willst du mit</p>
<pre><code class="language-cpp">typedef typename CQuickCounter&lt;T&gt;::const_iterator CQuickCounterIterator;
</code></pre>
<p>machen/bezwecken ?</p>
<p>wenn du das wilst was ich glaube das du willst, dann mach es mal so:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class CQuickCounter : public std::map&lt;T, U64&gt;
{
  typedef std::map&lt;T, U64&gt; map;
  typedef map::const_iterator CQuickCounterIterator;
  //typedef CQuickCounter&lt;T&gt;::const_iterator CQuickCounterIterator;
  void Print()
  {
     CQuickCounterIterator it = begin();
  }
};
</code></pre>
<p>Meep Meep</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1879940</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1879940</guid><dc:creator><![CDATA[Meep Meep]]></dc:creator><pubDate>Fri, 09 Apr 2010 11:07:34 GMT</pubDate></item><item><title><![CDATA[Reply to hilfe gcc will nicht so wie visual2003 on Fri, 09 Apr 2010 11:06:19 GMT]]></title><description><![CDATA[<blockquote>
<p>&gt; aber laestig das man dies vor alles schreiben muss, was von map geerbt wurde.</p>
</blockquote>
<p>Deshalb erbt man auch niemals öffentlich von STL-Containern. Die sind dafür nicht konzipiert. Es fehlen u.a. auch virtuelle Funktionen, besonders der Destruktor. Nutze Komposition oder private Vererbung!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1879941</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1879941</guid><dc:creator><![CDATA[Ad aCTa]]></dc:creator><pubDate>Fri, 09 Apr 2010 11:06:19 GMT</pubDate></item><item><title><![CDATA[Reply to hilfe gcc will nicht so wie visual2003 on Fri, 09 Apr 2010 11:07:34 GMT]]></title><description><![CDATA[<p>Der gcc hält sich hier streng an den Standard, das kannst du ihm nicht vorwerfen. Du kannst aber this.begin() verwenden können, wenn du weniger Schreibarbeit haben möchtest. Oder wie dir der gcc mit der Fehlermeldung mitgeteilt haben dürfte, kannst du den Schalter -fpermissive benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1879943</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1879943</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 09 Apr 2010 11:07:34 GMT</pubDate></item><item><title><![CDATA[Reply to hilfe gcc will nicht so wie visual2003 on Fri, 09 Apr 2010 11:18:25 GMT]]></title><description><![CDATA[<p>Die Containerklassen der STL sind nicht dazu gedacht von ihnen abzuleiten. Benutze lieber Aggregation.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1879954</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1879954</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Fri, 09 Apr 2010 11:18:25 GMT</pubDate></item><item><title><![CDATA[Reply to hilfe gcc will nicht so wie visual2003 on Fri, 09 Apr 2010 11:23:01 GMT]]></title><description><![CDATA[<p>Ad aCTa schrieb:</p>
<blockquote>
<p>Es fehlen u.a. auch virtuelle Funktionen, besonders der Destruktor. Nutze Komposition oder private Vererbung!</p>
</blockquote>
<p>Stört das eigentlich, solange man nicht gerade</p>
<pre><code class="language-cpp">map&lt;string, U64&gt; *abc = new CQuickCounter&lt;string&gt;();
</code></pre>
<p>schreibt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1879957</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1879957</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Fri, 09 Apr 2010 11:23:01 GMT</pubDate></item><item><title><![CDATA[Reply to hilfe gcc will nicht so wie visual2003 on Fri, 09 Apr 2010 11:28:51 GMT]]></title><description><![CDATA[<p>wxSkip schrieb:</p>
<blockquote>
<p>Ad aCTa schrieb:</p>
<blockquote>
<p>Es fehlen u.a. auch virtuelle Funktionen, besonders der Destruktor. Nutze Komposition oder private Vererbung!</p>
</blockquote>
<p>Stört das eigentlich, solange man nicht gerade</p>
<pre><code class="language-cpp">map&lt;string, U64&gt; *abc = new CQuickCounter&lt;string&gt;();
</code></pre>
<p>schreibt?</p>
</blockquote>
<p>[/quote]<br />
Nein. Es gibt Gründe warum man von Value-Typen wie eben zB map einer ist, erben will. Aber vorsicht ist geboten. Denn man darf den Typen dann nicht polymorph verwenden und das ist programmiertechnisch nicht verbietbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1879965</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1879965</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 09 Apr 2010 11:28:51 GMT</pubDate></item><item><title><![CDATA[Reply to hilfe gcc will nicht so wie visual2003 on Fri, 09 Apr 2010 12:01:29 GMT]]></title><description><![CDATA[<p>also wieso man von STL containern auf die art wie beschrieben nicht ableiten sollte verstehe ich nicht, bzw. ist doch eleganter als es ueber eine aggregations beziehung machen zu muessen. hoert sich jedenfalls eher nach ner notloesung an.</p>
<p>das mit dem this pointer vor dem begin() geht ebenfalls nicht (gleiche fehlermeldung)</p>
<p>@Meep Meep: was ist da der unterschied (gibt doch keinen in bezug auf deinen vorschlag fuer den iterator ?!)</p>
<p>darueber hinaus wundert es mich das obige fehlermeldung in bezug auf begin()<br />
ebenfalls beim gcc kommt wenn ich innerhalb von Print()</p>
<p>die funktion resetioflags(..) (kommt aus iomanip.h)<br />
benutzen moechte.</p>
<p>warum <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /> !?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1880005</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1880005</guid><dc:creator><![CDATA[pepe75]]></dc:creator><pubDate>Fri, 09 Apr 2010 12:01:29 GMT</pubDate></item><item><title><![CDATA[Reply to hilfe gcc will nicht so wie visual2003 on Fri, 09 Apr 2010 12:10:36 GMT]]></title><description><![CDATA[<p>pepe75 schrieb:</p>
<blockquote>
<p>also wieso man von STL containern auf die art wie beschrieben nicht ableiten sollte verstehe ich nicht, bzw. ist doch eleganter als es ueber eine aggregations beziehung machen zu muessen. hoert sich jedenfalls eher nach ner notloesung an.</p>
</blockquote>
<p>Weil du keine polymorphe verwendung haben kannst.</p>
<p>Deshalb sagt man: darf man nicht.<br />
Denn man muss die Gefahren kennen wenn man so eine Vererbung haben will.</p>
<p>Du darfst zB abgeleitete Typen nicht über einen Basisklassen Zeiger löschen. Du musst enorm auf slicing aufpassen und du hast kein polymorphes verhalten.</p>
<p>Meistens ist aggregation sinnvoller, da du eine Menge Probleme einfach umgehst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1880014</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1880014</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 09 Apr 2010 12:10:36 GMT</pubDate></item><item><title><![CDATA[Reply to hilfe gcc will nicht so wie visual2003 on Fri, 09 Apr 2010 12:16:19 GMT]]></title><description><![CDATA[<p>nur damit ich es richtig verstehe,<br />
also waere das folgende angebrachter ? --&gt;&gt;</p>
<pre><code>template&lt;class T&gt;
class CQuickCounter 
{
  typedef typename map&lt;T,U64&gt; CQuickCounterIterator;
  void Print()
  {
     CQuickCounterIterator it = m_map.begin();  
  }
  private:
    map&lt;T,U64&gt; m_map;
};
</code></pre>
<p>vielen dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1880020</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1880020</guid><dc:creator><![CDATA[pepe75]]></dc:creator><pubDate>Fri, 09 Apr 2010 12:16:19 GMT</pubDate></item><item><title><![CDATA[Reply to hilfe gcc will nicht so wie visual2003 on Fri, 09 Apr 2010 12:27:37 GMT]]></title><description><![CDATA[<p>pepe75 schrieb:</p>
<blockquote>
<p>nur damit ich es richtig verstehe,<br />
also waere das folgende angebrachter ? --&gt;&gt;</p>
<pre><code>template&lt;class T&gt;
class CQuickCounter 
{
  typedef typename map&lt;T,U64&gt; CQuickCounterIterator;
  void Print()
  {
     CQuickCounterIterator it = m_map.begin();  
  }
  private:
    map&lt;T,U64&gt; m_map;
};
</code></pre>
<p>vielen dank.</p>
</blockquote>
<p>Ja, mit dem Nachteil, dass du jetzt die Map-Funktionen außerhalb deiner Klasse nicht mehr verwenden kannst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1880031</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1880031</guid><dc:creator><![CDATA[wxSkip]]></dc:creator><pubDate>Fri, 09 Apr 2010 12:27:37 GMT</pubDate></item><item><title><![CDATA[Reply to hilfe gcc will nicht so wie visual2003 on Fri, 09 Apr 2010 13:09:59 GMT]]></title><description><![CDATA[<p>ich nochmal <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>ich bekomme gleiche fehlermeldung wie aus meinem ersten post,<br />
falls ich folgendes mache (und hier ist eigentlich nix mit vererbung krumm<br />
dachte ich !?!?) --&gt;</p>
<pre><code>template&lt;class T&gt;
class CQuickCounter
{
  typedef typename map&lt;T,U64&gt; CQuickCounterIterator;
  void Print( ofstream &amp;outFile )
  {
 for(it=m_map.begin(); it!=m_map.end(); it++)
      {
        T cntName     = (*it).first;
        U64 cntValue  = (*it).second;

        outFile &lt;&lt; resetiosflags(ios::adjustfield) &lt;&lt; setiosflags(ios::left) &lt;&lt; setw(PRINT_WIDTH); 
        outFile &lt;&lt; cntName &lt;&lt; &quot; &quot; &lt;&lt; cntValue &lt;&lt; endl;
      }
  }
  private:
    map&lt;T,U64&gt; m_map;
};
</code></pre>
<p>wieder mit gleicher fehlermeldung:<br />
there are no arguments to 'resetioflags' that depend on a template parameter, so a declaration of 'resetioflags' must be available <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>(die entsprechenden header-includes fuer std::xxx sind im originalcode natuerlich vorhanden).</p>
<p>vielen dank.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1880058</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1880058</guid><dc:creator><![CDATA[pepe75]]></dc:creator><pubDate>Fri, 09 Apr 2010 13:09:59 GMT</pubDate></item></channel></rss>