<?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[Pointer Probleme! Bitte helfen!]]></title><description><![CDATA[<p>habe hier 2 klassen:</p>
<p>TreeNode:</p>
<pre><code class="language-cpp">// forward declaration of class Tree
template&lt;typename NODETYPE&gt; class Tree;

// TreeNode class-template definition
template&lt;typename NODETYPE&gt;
class TreeNode
{
	 friend class Tree&lt;NODETYPE&gt;;  //friend class of Tree cause the private values

  public:
     TreeNode(const NODETYPE &amp;d) // constructor
     {
        leftPtr = NULL; // pointer to left subtree
		data = d;  // tree node data
		rightPtr = NULL; // pointer to right substree
     }

     NODETYPE getData() const  // return copy of node's data
     { return data; } 

  private:
     TreeNode&lt;NODETYPE&gt; *leftPtr; // pointer to left subtree
	 TreeNode&lt;NODETYPE&gt; *rightPtr; // pointer to right subtree
     NODETYPE data;

  }; // end class TreeNode
</code></pre>
<p>Tree:</p>
<pre><code class="language-cpp">#include &quot;Treenode.h&quot;

// Tree class-template definition
template&lt;typename NODETYPE&gt;
class Tree
{
   public:
      Tree(); // constructor
      void insertNode(const NODETYPE &amp;);
   private:
      TreeNode&lt;NODETYPE&gt; *rootPtr;

      // utility functions                                               
      void insertNodeHelper(TreeNode&lt;NODETYPE&gt; **, const NODETYPE &amp;);
NODETYPE &amp;value);

}; 

   template&lt;typename NODETYPE&gt;    // constructor
   Tree&lt;NODETYPE&gt;::Tree()
   {
      rootPtr = NULL; // indicate tree is initially empty
   }

   template&lt;typename NODETYPE&gt;    // insert node in Tree
   void Tree&lt;NODETYPE&gt;::insertNode( const NODETYPE &amp;value )
   {
      insertNodeHelper(&amp;rootPtr, value);
   }

   // utility function called by insertNode; receives a pointer
   // to a pointer so that the function can modify pointer's value
   template&lt;typename NODETYPE&gt;
   void Tree&lt;NODETYPE&gt;::insertNodeHelper(TreeNode&lt;NODETYPE&gt; **ptr, const NODETYPE &amp;value)
   {
      // subtree is empty; create new TreeNode containing value
      if ( *ptr == NULL )
         *ptr = new TreeNode&lt;NODETYPE&gt;(value);
      else // subtree is not empty
      {
         // data to insert is less than data in current node
         if ( value &lt; (*ptr)-&gt;data )
            insertNodeHelper( &amp;((*ptr)-&gt;leftPtr), value );
         else
         {
            // data to insert is greater than data in current node
            if ( value &gt; (*ptr)-&gt;data )
               insertNodeHelper( &amp;((*ptr)-&gt;rightPtr), value );
            else // duplicate data value ignored
               cout &lt;&lt; value &lt;&lt; &quot; dup&quot; &lt;&lt; endl;
         }
      } 
   }
</code></pre>
<p>was ich nicht verstehe, ist diese Pointer-to-Pointer arithmetik!<br />
wenn ich versuche die methoden zu ändern, schlägt der compiler fehl!</p>
<pre><code class="language-cpp">class Tree
{
   public:
      Tree(); // constructor
      void insertNode(const NODETYPE &amp;);
   private:
      TreeNode&lt;NODETYPE&gt; *rootPtr;

      // utility functions                                               
      void insertNodeHelper(TreeNode&lt;NODETYPE&gt; *, const NODETYPE &amp;);
NODETYPE &amp;value);

}; 

   template&lt;typename NODETYPE&gt;    // constructor
   Tree&lt;NODETYPE&gt;::Tree()
   {
      rootPtr = NULL; // indicate tree is initially empty
   }

   template&lt;typename NODETYPE&gt;    // insert node in Tree
   void Tree&lt;NODETYPE&gt;::insertNode( const NODETYPE &amp;value )
   {
      insertNodeHelper(rootPtr, value);
   }

   // utility function called by insertNode; receives a pointer
   // to a pointer so that the function can modify pointer's value
   template&lt;typename NODETYPE&gt;
   void Tree&lt;NODETYPE&gt;::insertNodeHelper(TreeNode&lt;NODETYPE&gt; *ptr, const NODETYPE &amp;value)
   {
      // subtree is empty; create new TreeNode containing value
      if ( ptr == NULL )
         ptr = new TreeNode&lt;NODETYPE&gt;(value);
      else // subtree is not empty
      {
         // data to insert is less than data in current node
         if ( value &lt; ptr-&gt;data )
            insertNodeHelper( ptr-&gt;leftPtr, value );
         else
         {
            // data to insert is greater than data in current node
            if ( value &gt; ptr-&gt;data )
               insertNodeHelper( ptr-&gt;rightPtr, value );
            else // duplicate data value ignored
               cout &lt;&lt; value &lt;&lt; &quot; dup&quot; &lt;&lt; endl;
         }
      } 
   }
</code></pre>
<p>so möchte ich das haben..ohne pointertoponiter..aber wie mache ich das???</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/152345/pointer-probleme-bitte-helfen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 06 Sep 2026 22:46:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/152345.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 05 Jul 2006 14:04:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Pointer Probleme! Bitte helfen! on Wed, 05 Jul 2006 14:04:20 GMT]]></title><description><![CDATA[<p>habe hier 2 klassen:</p>
<p>TreeNode:</p>
<pre><code class="language-cpp">// forward declaration of class Tree
template&lt;typename NODETYPE&gt; class Tree;

// TreeNode class-template definition
template&lt;typename NODETYPE&gt;
class TreeNode
{
	 friend class Tree&lt;NODETYPE&gt;;  //friend class of Tree cause the private values

  public:
     TreeNode(const NODETYPE &amp;d) // constructor
     {
        leftPtr = NULL; // pointer to left subtree
		data = d;  // tree node data
		rightPtr = NULL; // pointer to right substree
     }

     NODETYPE getData() const  // return copy of node's data
     { return data; } 

  private:
     TreeNode&lt;NODETYPE&gt; *leftPtr; // pointer to left subtree
	 TreeNode&lt;NODETYPE&gt; *rightPtr; // pointer to right subtree
     NODETYPE data;

  }; // end class TreeNode
</code></pre>
<p>Tree:</p>
<pre><code class="language-cpp">#include &quot;Treenode.h&quot;

// Tree class-template definition
template&lt;typename NODETYPE&gt;
class Tree
{
   public:
      Tree(); // constructor
      void insertNode(const NODETYPE &amp;);
   private:
      TreeNode&lt;NODETYPE&gt; *rootPtr;

      // utility functions                                               
      void insertNodeHelper(TreeNode&lt;NODETYPE&gt; **, const NODETYPE &amp;);
NODETYPE &amp;value);

}; 

   template&lt;typename NODETYPE&gt;    // constructor
   Tree&lt;NODETYPE&gt;::Tree()
   {
      rootPtr = NULL; // indicate tree is initially empty
   }

   template&lt;typename NODETYPE&gt;    // insert node in Tree
   void Tree&lt;NODETYPE&gt;::insertNode( const NODETYPE &amp;value )
   {
      insertNodeHelper(&amp;rootPtr, value);
   }

   // utility function called by insertNode; receives a pointer
   // to a pointer so that the function can modify pointer's value
   template&lt;typename NODETYPE&gt;
   void Tree&lt;NODETYPE&gt;::insertNodeHelper(TreeNode&lt;NODETYPE&gt; **ptr, const NODETYPE &amp;value)
   {
      // subtree is empty; create new TreeNode containing value
      if ( *ptr == NULL )
         *ptr = new TreeNode&lt;NODETYPE&gt;(value);
      else // subtree is not empty
      {
         // data to insert is less than data in current node
         if ( value &lt; (*ptr)-&gt;data )
            insertNodeHelper( &amp;((*ptr)-&gt;leftPtr), value );
         else
         {
            // data to insert is greater than data in current node
            if ( value &gt; (*ptr)-&gt;data )
               insertNodeHelper( &amp;((*ptr)-&gt;rightPtr), value );
            else // duplicate data value ignored
               cout &lt;&lt; value &lt;&lt; &quot; dup&quot; &lt;&lt; endl;
         }
      } 
   }
</code></pre>
<p>was ich nicht verstehe, ist diese Pointer-to-Pointer arithmetik!<br />
wenn ich versuche die methoden zu ändern, schlägt der compiler fehl!</p>
<pre><code class="language-cpp">class Tree
{
   public:
      Tree(); // constructor
      void insertNode(const NODETYPE &amp;);
   private:
      TreeNode&lt;NODETYPE&gt; *rootPtr;

      // utility functions                                               
      void insertNodeHelper(TreeNode&lt;NODETYPE&gt; *, const NODETYPE &amp;);
NODETYPE &amp;value);

}; 

   template&lt;typename NODETYPE&gt;    // constructor
   Tree&lt;NODETYPE&gt;::Tree()
   {
      rootPtr = NULL; // indicate tree is initially empty
   }

   template&lt;typename NODETYPE&gt;    // insert node in Tree
   void Tree&lt;NODETYPE&gt;::insertNode( const NODETYPE &amp;value )
   {
      insertNodeHelper(rootPtr, value);
   }

   // utility function called by insertNode; receives a pointer
   // to a pointer so that the function can modify pointer's value
   template&lt;typename NODETYPE&gt;
   void Tree&lt;NODETYPE&gt;::insertNodeHelper(TreeNode&lt;NODETYPE&gt; *ptr, const NODETYPE &amp;value)
   {
      // subtree is empty; create new TreeNode containing value
      if ( ptr == NULL )
         ptr = new TreeNode&lt;NODETYPE&gt;(value);
      else // subtree is not empty
      {
         // data to insert is less than data in current node
         if ( value &lt; ptr-&gt;data )
            insertNodeHelper( ptr-&gt;leftPtr, value );
         else
         {
            // data to insert is greater than data in current node
            if ( value &gt; ptr-&gt;data )
               insertNodeHelper( ptr-&gt;rightPtr, value );
            else // duplicate data value ignored
               cout &lt;&lt; value &lt;&lt; &quot; dup&quot; &lt;&lt; endl;
         }
      } 
   }
</code></pre>
<p>so möchte ich das haben..ohne pointertoponiter..aber wie mache ich das???</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1091848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091848</guid><dc:creator><![CDATA[brainwave81]]></dc:creator><pubDate>Wed, 05 Jul 2006 14:04:20 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer Probleme! Bitte helfen! on Wed, 05 Jul 2006 14:31:42 GMT]]></title><description><![CDATA[<p>Übergib einfach ne Referenz auf den pointer:</p>
<pre><code class="language-cpp">void Tree&lt;NODETYPE&gt;::insertNodeHelper(TreeNode&lt;NODETYPE&gt;&amp; *ptr, const NODETYPE &amp;value)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1091867</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091867</guid><dc:creator><![CDATA[templäd]]></dc:creator><pubDate>Wed, 05 Jul 2006 14:31:42 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer Probleme! Bitte helfen! on Wed, 05 Jul 2006 14:39:09 GMT]]></title><description><![CDATA[<blockquote>
<p>error C2528: '&lt;unbekannt&gt;' : Zeiger auf Verweis ungueltig</p>
</blockquote>
<p><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>
]]></description><link>https://www.c-plusplus.net/forum/post/1091878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091878</guid><dc:creator><![CDATA[brainwave81]]></dc:creator><pubDate>Wed, 05 Jul 2006 14:39:09 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer Probleme! Bitte helfen! on Wed, 05 Jul 2006 14:54:59 GMT]]></title><description><![CDATA[<p>sonst keine ne idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1091898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091898</guid><dc:creator><![CDATA[brainwave81]]></dc:creator><pubDate>Wed, 05 Jul 2006 14:54:59 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer Probleme! Bitte helfen! on Wed, 05 Jul 2006 14:57:05 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">TreeNode&lt;NODETYPE&gt;* &amp;ptr
</code></pre>
<p>so rum <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1091902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091902</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 05 Jul 2006 14:57:05 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer Probleme! Bitte helfen! on Wed, 05 Jul 2006 15:01:42 GMT]]></title><description><![CDATA[<p>ahhhhh..jetzt funktionierts <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>versteh den sinn trotzdem nicht!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1091910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1091910</guid><dc:creator><![CDATA[brainwave81]]></dc:creator><pubDate>Wed, 05 Jul 2006 15:01:42 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer Probleme! Bitte helfen! on Wed, 05 Jul 2006 17:34:28 GMT]]></title><description><![CDATA[<p>Eigentlich ganz einfach:</p>
<pre><code class="language-cpp">void test(int* x)
{
  x = new int;
  *x = 10;
}

int* a = 0;
test(a);
cout &lt;&lt; *a &lt;&lt; endl; // Undefiniert, a ist immernoch 0, und 0 darf nicht dereferenziert werden
</code></pre>
<p>Hier wird ein Zeiger by-value übergeben. Das heisst, die Adresse, die in a steht, wird an die Funktion test übergeben und in der Variablen x abgelegt. Wenn Du x änderst, änderst Du also nur die Kopie der Adresse. Das, worauf ein Zeiger zeigt, kann man manipulieren (und um das Gewünschte zu erreichen, hat man in C in diesem Fall einen Doppelzeiger übergeben müssen).</p>
<pre><code class="language-cpp">void test(int*&amp; x)
{
  x = new int;
  *x = 10;
}

int* a = 0;
test(a);
cout &lt;&lt; *a &lt;&lt; endl; // Ausgabe: 10
</code></pre>
<p>In C++ gibt es jedoch die Möglichkeit der Referenz, wo nicht nur ein Wert by-value übergeben wird, sondern tatsächlich die Variable selbst. Das &amp; hier ist nicht der Adressoperator, sondern der Referenzqualifizierer. Hier <strong>ist</strong> x die Variable a aus dem Hauptprogramm, nicht nur eine Kopie. Eine Änderung in x ändert also automatisch auch a.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1092045</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1092045</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Wed, 05 Jul 2006 17:34:28 GMT</pubDate></item><item><title><![CDATA[Reply to Pointer Probleme! Bitte helfen! on Thu, 06 Jul 2006 18:36:41 GMT]]></title><description><![CDATA[<p>hilfe, eine freundklasse<br />
*augen wasch*</p>
<p>hilfe!</p>
<p>OO ftpopo!<br />
*paranoia!*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1092730</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1092730</guid><dc:creator><![CDATA[tuxinatoor]]></dc:creator><pubDate>Thu, 06 Jul 2006 18:36:41 GMT</pubDate></item></channel></rss>