<?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[Objektübergabe mit Array]]></title><description><![CDATA[<p>Hallo zusammen,<br />
ich habe ein kleines Problem in einem (mittlerweile) schon etwas größeren Programm was ich leider nicht gelöst bekomme. Ich habe schon mein gutes C++ von A-Z durch gewälzt, aber irgendwie hat mir das auch nicht weiter geholfen.<br />
Ich habe den Code auf das Wesentliche reduziert.<br />
Eine kurze Beschreibung; es gibt ein globales Objekt &quot;kugel&quot;. Dieses soll je nach Benutzerwunsch mit einem beliebig großen Array belegt werden.<br />
Dazu wird in der Main Direktive die Funktion Benutzereingabe(); aufgerufen. Hier kann der Benutzer dann Länge und Inhalt des Arrays ändern. Am Ende der Benutzereingabe werden dann die Werte übergeben. Sobald jedoch der Konstruktor verlassen wird, sind die Werte futsch – bzw. nicht ordentlich übergeben.<br />
Was mach ich falsch? Ich probiere hier schon seit Donnerstag herum und bin sogar schon auf die abstruse Idee gekommen den = Operator zu überladen;.hat auch nix gebracht</p>
<p>Vielen Dank schonmal im Voraus!</p>
<pre><code class="language-cpp">//main.cpp
#include &lt;cstdlib&gt;
#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;ctype.h&gt;
#include &lt;time.h&gt;
#include &lt;conio.h&gt;
#include &lt;fstream&gt;
#include &lt;windows.h&gt; 

#include &quot;objekt.h&quot;
using namespace std;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
objekt kugel;
void benutzereingabe();
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int main(){
           benutzereingabe();
           kugel.print_array();
           getch();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void benutzereingabe(){
                       int laenge=1;
                       double hoehe=15.1;
                       double array[]={2};
                       double* arrayptr=array;
                       int auswahl;
                       cout&lt;&lt;&quot;werte aendern? 0:nein 1: ja\n&quot;;
                       cin&gt;&gt;auswahl;
                       if (auswahl==1){
                                       cout&lt;&lt;&quot;laenge array?\n&quot;;
                                       cin&gt;&gt;laenge;
                                       for (int i=0; i&lt;laenge;i++){
                                                                 cout&lt;&lt;&quot;wert &quot;&lt;&lt;i+1&lt;&lt;&quot; angeben\n&quot;;
                                                                 cin&gt;&gt;*(arrayptr+i);          
                                                                 }
                                       }
                       kugel=objekt(hoehe, arrayptr, laenge);             
                       }
</code></pre>
<pre><code class="language-cpp">//objekt.h
#include &lt;iostream&gt;
using namespace std;
#ifndef _OBJEKT_H_
#define _OBJEKT_H_

class objekt{
      private:
              double M_hoehe;                   
              double* M_array;
              double* M_arrayptr;
              int M_laenge_array;
              /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      public: objekt(){cout&lt;&lt;&quot;Standard konstruktor\n&quot;;};
              objekt(double, double*, int); 
              ~objekt( ){
                        cout&lt;&lt;&quot;\nObjekt zerstoert\n&quot;;
                        }
              void print_array();
              }; 
#endif
</code></pre>
<pre><code class="language-cpp">//objekt.cpp

#include &quot;objekt.h&quot;
#include &lt;time.h&gt;
#include &lt;windows.h&gt;
#include &lt;conio.h&gt;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
objekt::objekt(double hoehe, double* arrayptr, int laenge){    
          cout&lt;&lt;&quot;normaler konstruktor\n&quot;;
          M_hoehe=hoehe;
          M_laenge_array=laenge;
          M_arrayptr=arrayptr;
          for (int i=0;i&lt;M_laenge_array;i++){
                                     cout&lt;&lt;&quot;*arrayptr=&quot;&lt;&lt;*(arrayptr+i)&lt;&lt;&quot;\n&quot;;
                                     *(M_arrayptr+i)=*(arrayptr+i);
                                     }

          print_array();
          cout&lt;&lt;&quot;ende normaler konstruktor&quot;;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void objekt::print_array(){
                           cout&lt;&lt;&quot;\nprint array\n&quot;;
                           for (int i=0;i&lt;M_laenge_array;i++){
                                                              cout&lt;&lt;*(M_arrayptr+i)&lt;&lt;&quot;\n&quot;;
                                                              }
                           }
</code></pre>
<p>achja - Freund Google und die Forumssuche hab ich auch schon beschäftigt...mit eheher geringem Erfolg</p>
<p>//Edit: Da ich ein freund von Farben bin Code Tags =&gt; CPP Tags - evilissimo</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/261171/objektübergabe-mit-array</link><generator>RSS for Node</generator><lastBuildDate>Mon, 07 Sep 2026 13:27:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/261171.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 14 Feb 2010 21:15:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Objektübergabe mit Array on Mon, 15 Feb 2010 17:44:11 GMT]]></title><description><![CDATA[<p>Hallo zusammen,<br />
ich habe ein kleines Problem in einem (mittlerweile) schon etwas größeren Programm was ich leider nicht gelöst bekomme. Ich habe schon mein gutes C++ von A-Z durch gewälzt, aber irgendwie hat mir das auch nicht weiter geholfen.<br />
Ich habe den Code auf das Wesentliche reduziert.<br />
Eine kurze Beschreibung; es gibt ein globales Objekt &quot;kugel&quot;. Dieses soll je nach Benutzerwunsch mit einem beliebig großen Array belegt werden.<br />
Dazu wird in der Main Direktive die Funktion Benutzereingabe(); aufgerufen. Hier kann der Benutzer dann Länge und Inhalt des Arrays ändern. Am Ende der Benutzereingabe werden dann die Werte übergeben. Sobald jedoch der Konstruktor verlassen wird, sind die Werte futsch – bzw. nicht ordentlich übergeben.<br />
Was mach ich falsch? Ich probiere hier schon seit Donnerstag herum und bin sogar schon auf die abstruse Idee gekommen den = Operator zu überladen;.hat auch nix gebracht</p>
<p>Vielen Dank schonmal im Voraus!</p>
<pre><code class="language-cpp">//main.cpp
#include &lt;cstdlib&gt;
#include &lt;iostream&gt;
#include &lt;cstdlib&gt;
#include &lt;stdlib.h&gt;
#include &lt;stdio.h&gt;
#include &lt;ctype.h&gt;
#include &lt;time.h&gt;
#include &lt;conio.h&gt;
#include &lt;fstream&gt;
#include &lt;windows.h&gt; 

#include &quot;objekt.h&quot;
using namespace std;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
objekt kugel;
void benutzereingabe();
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int main(){
           benutzereingabe();
           kugel.print_array();
           getch();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void benutzereingabe(){
                       int laenge=1;
                       double hoehe=15.1;
                       double array[]={2};
                       double* arrayptr=array;
                       int auswahl;
                       cout&lt;&lt;&quot;werte aendern? 0:nein 1: ja\n&quot;;
                       cin&gt;&gt;auswahl;
                       if (auswahl==1){
                                       cout&lt;&lt;&quot;laenge array?\n&quot;;
                                       cin&gt;&gt;laenge;
                                       for (int i=0; i&lt;laenge;i++){
                                                                 cout&lt;&lt;&quot;wert &quot;&lt;&lt;i+1&lt;&lt;&quot; angeben\n&quot;;
                                                                 cin&gt;&gt;*(arrayptr+i);          
                                                                 }
                                       }
                       kugel=objekt(hoehe, arrayptr, laenge);             
                       }
</code></pre>
<pre><code class="language-cpp">//objekt.h
#include &lt;iostream&gt;
using namespace std;
#ifndef _OBJEKT_H_
#define _OBJEKT_H_

class objekt{
      private:
              double M_hoehe;                   
              double* M_array;
              double* M_arrayptr;
              int M_laenge_array;
              /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
      public: objekt(){cout&lt;&lt;&quot;Standard konstruktor\n&quot;;};
              objekt(double, double*, int); 
              ~objekt( ){
                        cout&lt;&lt;&quot;\nObjekt zerstoert\n&quot;;
                        }
              void print_array();
              }; 
#endif
</code></pre>
<pre><code class="language-cpp">//objekt.cpp

#include &quot;objekt.h&quot;
#include &lt;time.h&gt;
#include &lt;windows.h&gt;
#include &lt;conio.h&gt;
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
objekt::objekt(double hoehe, double* arrayptr, int laenge){    
          cout&lt;&lt;&quot;normaler konstruktor\n&quot;;
          M_hoehe=hoehe;
          M_laenge_array=laenge;
          M_arrayptr=arrayptr;
          for (int i=0;i&lt;M_laenge_array;i++){
                                     cout&lt;&lt;&quot;*arrayptr=&quot;&lt;&lt;*(arrayptr+i)&lt;&lt;&quot;\n&quot;;
                                     *(M_arrayptr+i)=*(arrayptr+i);
                                     }

          print_array();
          cout&lt;&lt;&quot;ende normaler konstruktor&quot;;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void objekt::print_array(){
                           cout&lt;&lt;&quot;\nprint array\n&quot;;
                           for (int i=0;i&lt;M_laenge_array;i++){
                                                              cout&lt;&lt;*(M_arrayptr+i)&lt;&lt;&quot;\n&quot;;
                                                              }
                           }
</code></pre>
<p>achja - Freund Google und die Forumssuche hab ich auch schon beschäftigt...mit eheher geringem Erfolg</p>
<p>//Edit: Da ich ein freund von Farben bin Code Tags =&gt; CPP Tags - evilissimo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1855652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1855652</guid><dc:creator><![CDATA[frederenke]]></dc:creator><pubDate>Mon, 15 Feb 2010 17:44:11 GMT</pubDate></item><item><title><![CDATA[Reply to Objektübergabe mit Array on Sun, 14 Feb 2010 21:46:50 GMT]]></title><description><![CDATA[<p>- Dein Arraypointer zeigt auf ein statisches Array in einer Funktion. Dieses existiert nach verlassen dieser Funktion nicht mehr<br />
- Du machst keinerlei Anstalten die Arraygröße zu ändern<br />
- Du schreibst einfach wild in Speicher der dir nicht gehört<br />
- Die Kopiersemantik deines Objekts (die Standardsemantik, da du nichts eigenes definiert hast) ist wahrscheinlich nicht das was du willst<br />
- Globale Variablen sind in der Regel auch eher eine schlechte Idee, wenn man keinen guten Grund für sie hat und weiß worauf man sich einlässt. (&quot;ich kann's nicht besser&quot; und Faulheit sind keine gute Gründe)</p>
<p>Das ganze ist auf so vielen Ebenen falsch konzipiert, dass man das nicht mehr retten kann. Da muss ein völlig neuer Programmaufbau her. Doch keine Panik: Nimm einfach <code>std::vector</code> und du hast mit einem Schlag alle genannten Probleme gelöst.</p>
<p>edit: Und noch ein paar Sachen, wo ich schon dabei bin:<br />
- In C++ fangen die C-Standardheader mit 'c' an und haben kein '.h' mehr am Ende, also zum Beispiel 'ctime' statt 'time.h'.<br />
- Der einzige Header den du anscheinend überhaupt benutzt ist iostream. Wozu sind all die anderen da? Man sollte nur genau die Header einbinden die man wirklich braucht.</p>
<ul>
<li><code>using namespace</code> in Headerdateien zu benutzen ist eine ganz schlechte Idee was die Wiederbenutzbarkeit der Header angeht. Also genau das, was man eigentlich nicht will.<br />
- Dein Einrückungsstil ist dem Lesen eher hinderlich. 1-8 Leerzeichen als Einrückung sind viel übersichtlicher.</li>
</ul>
]]></description><link>https://www.c-plusplus.net/forum/post/1855655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1855655</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 14 Feb 2010 21:46:50 GMT</pubDate></item><item><title><![CDATA[Reply to Objektübergabe mit Array on Mon, 15 Feb 2010 16:12:18 GMT]]></title><description><![CDATA[<p>vielen dank erstmal.<br />
wer auch noch auf das problem stößt; <a href="http://www.codeguru.com/cpp/cpp/cpp_mfc/stl/article.php/c4027" rel="nofollow">http://www.codeguru.com/cpp/cpp/cpp_mfc/stl/article.php/c4027</a> hier ists ganz gut erklärt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1856040</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1856040</guid><dc:creator><![CDATA[frederenke]]></dc:creator><pubDate>Mon, 15 Feb 2010 16:12:18 GMT</pubDate></item></channel></rss>