<?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[Fremder Source-Code: Fehler bei typedef]]></title><description><![CDATA[<p>Ich hab hier fremden Source-Code, der bei mir allerdings nicht kompiliert. Und zwar kommt folgender Fehler:</p>
<blockquote>
<p>g++ -O0 -g3 -Wall -c -fmessage-length=0 -std=c++11 -o src\main.o ..\src\main.cpp<br />
In file included from ..\src\kdtree++/kdtree.hpp:61:0,<br />
from ..\src\main.cpp:10:<br />
..\src\kdtree++/allocator.hpp:21:26: Fehler: Deklaration von »typedef struct KDTree::_Node&lt;_Tp&gt; KDTree::_Alloc_base&lt;_Tp, _Alloc&gt;::_Node« [-fpermissive]<br />
In file included from ..\src\kdtree++/allocator.hpp:12:0,<br />
from ..\src\kdtree++/kdtree.hpp:61,<br />
from ..\src\main.cpp:10:<br />
..\src\kdtree++/node.hpp:48:12: Fehler: verändert die Bedeutung von »_Node« von »struct KDTree::_Node&lt;_Tp&gt;« [-fpermissive]</p>
</blockquote>
<p>allocator.hpp</p>
<pre><code>namespace KDTree
{

  template &lt;typename _Tp, typename _Alloc&gt;
    class _Alloc_base
    {
    public:
      typedef _Node&lt;_Tp&gt; _Node; // Zeile 21
</code></pre>
<p>node.hpp</p>
<pre><code>template &lt;typename _Val&gt;
    struct _Node : public _Node_base // Zeile 48
    {
</code></pre>
<p>Muss ich &quot;_Node&quot; beim typedef zwingend umbennen oder gibt es noch andere Lösungen (vielleicht Parameter für den Compiler oder sowas)? Als Compiler benutze ich den g++ 4.7. Interessanterweise hat der Entwickler auch den g++ verwendet, allerdings eine deutlich ältere Version (der Code ist von 2007).</p>
<p>Generell interessiert mich auch, ob so ein Überschreiben von _Node durch den typedef überhaupt standardkonform ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/320936/fremder-source-code-fehler-bei-typedef</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Jul 2026 13:14:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/320936.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 17 Oct 2013 19:47:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Fremder Source-Code: Fehler bei typedef on Thu, 17 Oct 2013 19:47:36 GMT]]></title><description><![CDATA[<p>Ich hab hier fremden Source-Code, der bei mir allerdings nicht kompiliert. Und zwar kommt folgender Fehler:</p>
<blockquote>
<p>g++ -O0 -g3 -Wall -c -fmessage-length=0 -std=c++11 -o src\main.o ..\src\main.cpp<br />
In file included from ..\src\kdtree++/kdtree.hpp:61:0,<br />
from ..\src\main.cpp:10:<br />
..\src\kdtree++/allocator.hpp:21:26: Fehler: Deklaration von »typedef struct KDTree::_Node&lt;_Tp&gt; KDTree::_Alloc_base&lt;_Tp, _Alloc&gt;::_Node« [-fpermissive]<br />
In file included from ..\src\kdtree++/allocator.hpp:12:0,<br />
from ..\src\kdtree++/kdtree.hpp:61,<br />
from ..\src\main.cpp:10:<br />
..\src\kdtree++/node.hpp:48:12: Fehler: verändert die Bedeutung von »_Node« von »struct KDTree::_Node&lt;_Tp&gt;« [-fpermissive]</p>
</blockquote>
<p>allocator.hpp</p>
<pre><code>namespace KDTree
{

  template &lt;typename _Tp, typename _Alloc&gt;
    class _Alloc_base
    {
    public:
      typedef _Node&lt;_Tp&gt; _Node; // Zeile 21
</code></pre>
<p>node.hpp</p>
<pre><code>template &lt;typename _Val&gt;
    struct _Node : public _Node_base // Zeile 48
    {
</code></pre>
<p>Muss ich &quot;_Node&quot; beim typedef zwingend umbennen oder gibt es noch andere Lösungen (vielleicht Parameter für den Compiler oder sowas)? Als Compiler benutze ich den g++ 4.7. Interessanterweise hat der Entwickler auch den g++ verwendet, allerdings eine deutlich ältere Version (der Code ist von 2007).</p>
<p>Generell interessiert mich auch, ob so ein Überschreiben von _Node durch den typedef überhaupt standardkonform ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2360979</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2360979</guid><dc:creator><![CDATA[Ramanujan]]></dc:creator><pubDate>Thu, 17 Oct 2013 19:47:36 GMT</pubDate></item><item><title><![CDATA[Reply to Fremder Source-Code: Fehler bei typedef on Thu, 17 Oct 2013 19:55:09 GMT]]></title><description><![CDATA[<p>Ramanujan schrieb:</p>
<blockquote>
<p>Muss ich &quot;_Node&quot; beim typedef zwingend umbennen oder gibt es noch andere Lösungen (vielleicht Parameter für den Compiler oder sowas)?</p>
</blockquote>
<p>Steht in der Fehlermeldung: -fpermissive</p>
<blockquote>
<p>Interessanterweise hat der Entwickler auch den g++ verwendet, allerdings eine deutlich ältere Version (der Code ist von 2007).</p>
</blockquote>
<p>Es gibt keinen zwingenden technischen Grund, wieso das nicht erlaubt wäre und alte Compiler liessen noch einiges durchgehen, was nicht unbedingt standardkonform wäre.</p>
<blockquote>
<p>Generell interessiert mich auch, ob so ein Überschreiben von _Node durch den typedef überhaupt standardkonform ist.</p>
</blockquote>
<p>Nein. Nicht einmal der Name ist standardkonform, &quot;_&quot; gefolgt von Grossbuchstabe ist für die Implementierung reserviert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2360985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2360985</guid><dc:creator><![CDATA[octtree]]></dc:creator><pubDate>Thu, 17 Oct 2013 19:55:09 GMT</pubDate></item><item><title><![CDATA[Reply to Fremder Source-Code: Fehler bei typedef on Thu, 17 Oct 2013 20:14:55 GMT]]></title><description><![CDATA[<p>Wenn wir mal den reservierten Bezeichner ignorierten, sollte das vermutlich:</p>
<pre><code class="language-cpp">typedef KDTree::_Node&lt;_Tp&gt; _Node; // Zeile 21
</code></pre>
<p>heißen.</p>
<p>Das Problem hier ist einfach, das sich die Bedeutung des tyoedefs ändert, je nachdem in welchem Kontext sieht betrachtet wird (an der Stelle der Deklaration oder nachdem _Alloc_base definiert wurde, 3.3.7/1 2) - ill-formed, keine Diegnose erforderlich).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2360991</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2360991</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 17 Oct 2013 20:14:55 GMT</pubDate></item><item><title><![CDATA[Reply to Fremder Source-Code: Fehler bei typedef on Fri, 18 Oct 2013 10:02:17 GMT]]></title><description><![CDATA[<p>Kennt jemand zufällig eine gute Implementierung von KD-Bäumen?<br />
Die jetztige scheint mir nicht so gut zu sein:</p>
<p>Ich hab gleich den nächsten Fehler, den ich nicht verstehe:</p>
<p>iterator.hpp</p>
<pre><code>class _Base_iterator
  {
  protected:
    typedef _Node_base::_Base_const_ptr _Base_const_ptr;
    _Base_const_ptr _M_node;

 template &lt;size_t const __K, typename _Val,
              typename _Acc, typename _Cmp, typename _Alloc&gt;
      friend class KDTree;
</code></pre>
<p>kdtree.hpp</p>
<pre><code>template &lt;size_t const __K, typename _Val,
            typename _Acc = _Bracket_accessor&lt;_Val&gt;,
            typename _Cmp = std::less&lt;typename _Acc::result_type&gt;,
            typename _Alloc = std::allocator&lt;_Node&lt;_Val&gt; &gt; &gt;
    class KDTree : protected _Alloc_base&lt;_Val, _Alloc&gt;
    {
// [...]
// Innerhalb einer Methode von KDTree:
_Link_const_type target = static_cast&lt;_Link_const_type&gt;(__IT._M_node);
</code></pre>
<p>Es kommt folgender Fehler:</p>
<blockquote>
<p>..\src\kdtree++/iterator.hpp:53:21: error: 'const KDTree::_Node_base* KDTree::_Base_iterator::_M_node' is protected<br />
In file included from ..\src\main.cpp:10:0:<br />
..\src\kdtree++/kdtree.hpp:271:77: error: within this context</p>
</blockquote>
<p>Da KDTree als Freund in dem _Base_iterator gekennzeichnet wurde, dachte ich, dass das funktionieren würde. Ich hab mal das &quot;protected&quot; in _Base_iterator auf &quot;public&quot; geändert, dann kommt aber immer noch ein Fehler:</p>
<blockquote>
<p>..\src\kdtree++/iterator.hpp:53:21: error: 'const KDTree::_Node_base* KDTree::_Base_iterator::_M_node' is inaccessible<br />
In file included from ..\src\main.cpp:10:0:<br />
..\src\kdtree++/kdtree.hpp:271:77: error: within this context</p>
</blockquote>
<p>Eine andere Frage hab ich noch: Ist ein Name, in dem _ gefolgt von einem Großbuchstaben in der Mitte vorkommt, standardkonform, also z.B. &quot;XYZ_ABC&quot;?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361109</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361109</guid><dc:creator><![CDATA[Ramanujan]]></dc:creator><pubDate>Fri, 18 Oct 2013 10:02:17 GMT</pubDate></item><item><title><![CDATA[Reply to Fremder Source-Code: Fehler bei typedef on Fri, 18 Oct 2013 10:26:15 GMT]]></title><description><![CDATA[<pre><code>_Link_const_type target = static_cast&lt;_Link_const_type&gt;(__IT._M_node);
</code></pre>
<p>wie ist __IT deklariert und welcher Zugriffsspezifikation unterliegt _M_Node in _Base_iterator?</p>
<blockquote>
<p>Eine andere Frage hab ich noch: Ist ein Name, in dem _ gefolgt von einem Großbuchstaben in der Mitte vorkommt, standardkonform, also z.B. &quot;XYZ_ABC&quot;?</p>
</blockquote>
<p>ja. Reserviert sind<br />
1. Im globalen Namensraum jeder Bezeichner mit _ am Anfang<br />
2. Jeder Bezeichner mit _ am Anfang gefolgt von einem Großbuchstaben<br />
3. Jeder Bezeichner mit __ an irgendeiner Stelle des Namens</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361124</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 18 Oct 2013 10:26:15 GMT</pubDate></item><item><title><![CDATA[Reply to Fremder Source-Code: Fehler bei typedef on Fri, 18 Oct 2013 19:10:32 GMT]]></title><description><![CDATA[<p>Danke, der Hinweis hat gereicht:</p>
<p>__IT war vom Typ _Iterator (einer Unterklasse von _Base_iterator mit &quot;protected&quot;-Vererbung). Ich hab im _Iterator den KDTree als Friend markiert. Jetzt hab ich keine Fehler mehr beim Kompilieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361256</guid><dc:creator><![CDATA[Ramanujan]]></dc:creator><pubDate>Fri, 18 Oct 2013 19:10:32 GMT</pubDate></item><item><title><![CDATA[Reply to Fremder Source-Code: Fehler bei typedef on Fri, 18 Oct 2013 19:14:35 GMT]]></title><description><![CDATA[<p>Edit: Unsinn, ich habe die Frage falsch gelesen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2361258</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2361258</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Fri, 18 Oct 2013 19:14:35 GMT</pubDate></item></channel></rss>