<?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[Array an Klassenfunktion übergeben]]></title><description><![CDATA[<p>Hallo,<br />
ich versuche in diesem Programm ein Array mit 3 Instanzen einer Klasse an eine Methode einer anderen Klasse zu übergeben.<br />
In der Klasse Methode &quot;getraenkeanzeigen&quot; kommt der Fehler:<br />
&quot;error: base operand of '-&gt;' has non-pointer type 'mygetraenk'|&quot;</p>
<p>Irgendwie bekomme ich es nicht raus, was ich falsch mache.<br />
Vielleicht hat ja jemand einen Tipp für mich.<br />
Vielen Dank im Voraus!</p>
<pre><code>#include &lt;iostream&gt;

using namespace std;

class mygetraenk
{
    //die Attribute
    string flaschenname;
    int flaschenpreis;
    int flaschenlagerbestand;

    //die Methoden
    public:
    //der Konstruktor
    mygetraenk(string getraenkname, int getraenkpreis, int getraenkbestand);
    //der Destruktor
    ~mygetraenk();

    //zum Abfragen des Namems
    string getName();
    //zum Abfragen des Preises
    int getPreis();
    //zum Abfragen des Lagerbestands
    int getLagerbestand();

    //zum Setzen des Lagerbestands
    void setLagerbestand(int anzahl);
};

mygetraenk::mygetraenk(string getraenkname, int getraenkpreis, int getraenkbestand) {
    flaschenname = getraenkname;
    flaschenpreis = getraenkpreis;
    flaschenlagerbestand = getraenkbestand;
}

mygetraenk::~mygetraenk(){
    cout &lt;&lt; &quot;Eine Getraenkeinstanz wurde geloescht.&quot; &lt;&lt; endl;
}

string mygetraenk::getName() {
    return flaschenname;
}

int mygetraenk::getPreis() {
    return flaschenpreis;
}

int mygetraenk::getLagerbestand() {
    return flaschenlagerbestand;
}

void mygetraenk::setLagerbestand(int anzahl) {
    flaschenlagerbestand = anzahl;
}

class flaschenautomat
{
   //die Attribute
    flaschenautomat* getraenkeliste[3];

    //die Methoden
    public:
    //der Konstruktor
    flaschenautomat();
    //der Destruktor
    ~flaschenautomat();

    //zum Anzeigen eines Getraenks
    void getraenkanzeigen(int getraenkeIndex,mygetraenk getraenkeliste[3]);

};

flaschenautomat::flaschenautomat()
{
}

flaschenautomat::~flaschenautomat()
{
    cout &lt;&lt; &quot;Der Automat wurde geloescht.&quot; &lt;&lt; endl;
}

 void flaschenautomat::getraenkanzeigen (int getraenkeIndex,mygetraenk getraenkeliste[3])
 {
    cout &lt;&lt; &quot;Das gewaehlte Getraenk: &quot; &lt;&lt; getraenkeliste[getraenkeIndex-1]-&gt;getName();
 }

int main()
{
    string tempgetraenkname;
    int tempgetraenkpreis;
    int tempgetraenkbestand;

    int getraenkkenummer;

    mygetraenk *getraenkeliste[3];

    flaschenautomat *automat1 = new flaschenautomat();

    cout &lt;&lt; &quot;Bitte geben Sie die Getraenke ein: &quot; &lt;&lt; endl;
    for (int index = 0; index &lt; 3; index++) {
        cout &lt;&lt; &quot;Getraenkename: &quot;;
        cin &gt;&gt; tempgetraenkname;
        cout &lt;&lt; &quot;Getraenkepreis: &quot;;
        cin &gt;&gt; tempgetraenkpreis;
        cout &lt;&lt; &quot;Getraenkeanzahl: &quot;;
        cin &gt;&gt; tempgetraenkbestand;
        getraenkeliste[index] = new mygetraenk(tempgetraenkname,tempgetraenkpreis,tempgetraenkbestand);
    }

     cout &lt;&lt; &quot;Bitte Getraenkenummer eingeben: &quot;;
     cin &gt;&gt; getraenkkenummer;

    automat1-&gt;getraenkanzeigen(getraenkkenummer,getraenkeliste[3]);

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/316931/array-an-klassenfunktion-übergeben</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Jul 2026 13:44:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/316931.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 21 May 2013 15:33:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Array an Klassenfunktion übergeben on Tue, 21 May 2013 15:33:21 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich versuche in diesem Programm ein Array mit 3 Instanzen einer Klasse an eine Methode einer anderen Klasse zu übergeben.<br />
In der Klasse Methode &quot;getraenkeanzeigen&quot; kommt der Fehler:<br />
&quot;error: base operand of '-&gt;' has non-pointer type 'mygetraenk'|&quot;</p>
<p>Irgendwie bekomme ich es nicht raus, was ich falsch mache.<br />
Vielleicht hat ja jemand einen Tipp für mich.<br />
Vielen Dank im Voraus!</p>
<pre><code>#include &lt;iostream&gt;

using namespace std;

class mygetraenk
{
    //die Attribute
    string flaschenname;
    int flaschenpreis;
    int flaschenlagerbestand;

    //die Methoden
    public:
    //der Konstruktor
    mygetraenk(string getraenkname, int getraenkpreis, int getraenkbestand);
    //der Destruktor
    ~mygetraenk();

    //zum Abfragen des Namems
    string getName();
    //zum Abfragen des Preises
    int getPreis();
    //zum Abfragen des Lagerbestands
    int getLagerbestand();

    //zum Setzen des Lagerbestands
    void setLagerbestand(int anzahl);
};

mygetraenk::mygetraenk(string getraenkname, int getraenkpreis, int getraenkbestand) {
    flaschenname = getraenkname;
    flaschenpreis = getraenkpreis;
    flaschenlagerbestand = getraenkbestand;
}

mygetraenk::~mygetraenk(){
    cout &lt;&lt; &quot;Eine Getraenkeinstanz wurde geloescht.&quot; &lt;&lt; endl;
}

string mygetraenk::getName() {
    return flaschenname;
}

int mygetraenk::getPreis() {
    return flaschenpreis;
}

int mygetraenk::getLagerbestand() {
    return flaschenlagerbestand;
}

void mygetraenk::setLagerbestand(int anzahl) {
    flaschenlagerbestand = anzahl;
}

class flaschenautomat
{
   //die Attribute
    flaschenautomat* getraenkeliste[3];

    //die Methoden
    public:
    //der Konstruktor
    flaschenautomat();
    //der Destruktor
    ~flaschenautomat();

    //zum Anzeigen eines Getraenks
    void getraenkanzeigen(int getraenkeIndex,mygetraenk getraenkeliste[3]);

};

flaschenautomat::flaschenautomat()
{
}

flaschenautomat::~flaschenautomat()
{
    cout &lt;&lt; &quot;Der Automat wurde geloescht.&quot; &lt;&lt; endl;
}

 void flaschenautomat::getraenkanzeigen (int getraenkeIndex,mygetraenk getraenkeliste[3])
 {
    cout &lt;&lt; &quot;Das gewaehlte Getraenk: &quot; &lt;&lt; getraenkeliste[getraenkeIndex-1]-&gt;getName();
 }

int main()
{
    string tempgetraenkname;
    int tempgetraenkpreis;
    int tempgetraenkbestand;

    int getraenkkenummer;

    mygetraenk *getraenkeliste[3];

    flaschenautomat *automat1 = new flaschenautomat();

    cout &lt;&lt; &quot;Bitte geben Sie die Getraenke ein: &quot; &lt;&lt; endl;
    for (int index = 0; index &lt; 3; index++) {
        cout &lt;&lt; &quot;Getraenkename: &quot;;
        cin &gt;&gt; tempgetraenkname;
        cout &lt;&lt; &quot;Getraenkepreis: &quot;;
        cin &gt;&gt; tempgetraenkpreis;
        cout &lt;&lt; &quot;Getraenkeanzahl: &quot;;
        cin &gt;&gt; tempgetraenkbestand;
        getraenkeliste[index] = new mygetraenk(tempgetraenkname,tempgetraenkpreis,tempgetraenkbestand);
    }

     cout &lt;&lt; &quot;Bitte Getraenkenummer eingeben: &quot;;
     cin &gt;&gt; getraenkkenummer;

    automat1-&gt;getraenkanzeigen(getraenkkenummer,getraenkeliste[3]);

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2325035</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2325035</guid><dc:creator><![CDATA[StingerMKO]]></dc:creator><pubDate>Tue, 21 May 2013 15:33:21 GMT</pubDate></item><item><title><![CDATA[Reply to Array an Klassenfunktion übergeben on Tue, 21 May 2013 15:40:30 GMT]]></title><description><![CDATA[<p>Ersetze &quot;-&gt;&quot; durch &quot;.&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2325037</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2325037</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Tue, 21 May 2013 15:40:30 GMT</pubDate></item><item><title><![CDATA[Reply to Array an Klassenfunktion übergeben on Tue, 21 May 2013 15:48:25 GMT]]></title><description><![CDATA[<p>Aha! Das kannte ich noch nicht.<br />
Jetzt compiliert alles ohne Fehler, das Programm startet und ich kann die drei Getränke pflegen und auch die Zahl von dem Getränk eingeben, welches ich ausgeben möchte.<br />
Dann stürzt das Programm aber einfach ab <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/2325039</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2325039</guid><dc:creator><![CDATA[StingerMKO]]></dc:creator><pubDate>Tue, 21 May 2013 15:48:25 GMT</pubDate></item><item><title><![CDATA[Reply to Array an Klassenfunktion übergeben on Tue, 21 May 2013 15:54:01 GMT]]></title><description><![CDATA[<p>Ich habe mir jetzt deinen Code erst angesehen.<br />
Wo lernst du C++? Tutorial? Buch? Uni?<br />
Wenn Buch oder Tutorial bitte sagen und ggf. ein vernünftiges Buch kaufen.<br />
Wenn du an der Uni lernst, hast du Pech gehabt. Dein Professor/Dozent ist offenbar in Java beheimatet - alle Klassenobjekte werden mit new erzeugt. Zum einen ist das Speicherleck anfällig, zum anderen vollkommen überflüssig.<br />
Das du den '.' Operator offenbar nicht kennst, ist ein Beispiel dafür.<br />
Der Grund, warum das Programm abstürtzt ist, dass du ein Array von Pointern verwendest, es aber nicht initialisierst. Deine Pointer zeigen somit auf irgendeinen Speicherbereich und wenn du versuchst den zu ändern bekommst du eine Zugriffsverletzung und das Program stürzt ab.<br />
Du musst die Objekte des Arrays mit new erzeugen oder - besser - einfach ein Array von Objekten verwenden. Schreibe den Code am besten so um, dass sich alle Objekte auf dem Stack befinden.<br />
Also:</p>
<pre><code>Klasse *objekt = new Klasse;
...
delete objekt;
</code></pre>
<p>wird zu</p>
<pre><code>Klasse objekt;
</code></pre>
<p>Zugriff auf Member dann mit &quot;.&quot; anstatt &quot;-&gt;&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2325041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2325041</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Tue, 21 May 2013 15:54:01 GMT</pubDate></item><item><title><![CDATA[Reply to Array an Klassenfunktion übergeben on Tue, 21 May 2013 16:02:13 GMT]]></title><description><![CDATA[<p>Nathan schrieb:</p>
<blockquote>
<p>Der Grund, warum das Programm abstürtzt ist, dass du ein Array von Pointern verwendest, es aber nicht initialisierst. Deine Pointer zeigen somit auf irgendeinen Speicherbereich und wenn du versuchst den zu ändern bekommst du eine Zugriffsverletzung und das Program stürzt ab.</p>
</blockquote>
<p>Das Problem ist wohl eher, dass nicht richtig klar ist, was an <code>flaschenautomat::getraenkanzeigen()</code> übergeben werden soll und was übergeben wird - und zusätzlich noch ein Zugriffsfehler im Array <code>getraenkeliste</code> .</p>
<p>Sollte wohl so aussehen:</p>
<pre><code class="language-cpp">class flaschenautomat
{
  // [...]
  void getraenkanzeigen(int getraenkeIndex,mygetraenk * getraenkeliste[3]);
};

int main(){
  // [...]
  automat1-&gt;getraenkanzeigen(getraenkkenummer,getraenkeliste);
}
</code></pre>
<p>Der Quelltext hat ein paar Macken, aber das wird schon <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/2325042</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2325042</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Tue, 21 May 2013 16:02:13 GMT</pubDate></item><item><title><![CDATA[Reply to Array an Klassenfunktion übergeben on Tue, 21 May 2013 16:09:14 GMT]]></title><description><![CDATA[<p>Furble Wurble schrieb:</p>
<blockquote>
<p>Nathan schrieb:</p>
<blockquote>
<p>Der Grund, warum das Programm abstürtzt ist, dass du ein Array von Pointern verwendest, es aber nicht initialisierst. Deine Pointer zeigen somit auf irgendeinen Speicherbereich und wenn du versuchst den zu ändern bekommst du eine Zugriffsverletzung und das Program stürzt ab.</p>
</blockquote>
<p>Das Problem ist wohl eher, dass nicht richtig klar ist, was an <code>flaschenautomat::getraenkanzeigen()</code> übergeben werden soll und was übergeben wird - und zusätzlich noch ein Zugriffsfehler im Array <code>getraenkeliste</code> .</p>
</blockquote>
<p>Oh stimmt ja, der Speicher wird angefordert.<br />
Habe ich übersehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2325043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2325043</guid><dc:creator><![CDATA[Nathan]]></dc:creator><pubDate>Tue, 21 May 2013 16:09:14 GMT</pubDate></item><item><title><![CDATA[Reply to Array an Klassenfunktion übergeben on Tue, 21 May 2013 19:52:43 GMT]]></title><description><![CDATA[<p>Also, ich lerne C++ im Rahmen einer Medieninformatik Studiums per Fernhochschule.<br />
Das Thema Klassen/Funktionen und Zeiger wurde bisher nur in einem Studienheft behandelt.<br />
Aber Sekundärliteratur wollte ich mir auch besorgen.<br />
Habt ihr einen Tipp für ein gutes C++ Buch, das auch für Anfänger geeignet ist, wenn möglich mit vielen Übungen?</p>
<p>Mit euren Tipps oben hab ich es leider auch nicht hinbekommen, stehe auf dem Schlauch.<br />
Ich denke ich werde erstmal Bücher wälzen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2325108</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2325108</guid><dc:creator><![CDATA[StingerMKO]]></dc:creator><pubDate>Tue, 21 May 2013 19:52:43 GMT</pubDate></item><item><title><![CDATA[Reply to Array an Klassenfunktion übergeben on Tue, 21 May 2013 20:43:41 GMT]]></title><description><![CDATA[<p>StingerMKO schrieb:</p>
<blockquote>
<p>Also, ich lerne C++ im Rahmen einer Medieninformatik Studiums per Fernhochschule.</p>
</blockquote>
<p>Okay.<br />
Das wichtigste ist meines Erachtens, dass Du Dir klar bist über jeden einzelnen Buchstaben in Deinem Code.<br />
Der Code und der Fehler sehen mir so aus, als ob Du ein wenig den Überblick verloren hast.</p>
<p>Was willst Du machen? Wie ist die Aufgabe?</p>
<p>Ein Getränkeautomat, der Getränke enthält - so viel ist klar.<br />
Was sind die Eigenschaften eines Getränks? Lagerbestand? Sicher nicht. Überleg nochmal.<br />
Ebenso: was sind die Eigenschaften eines Flaschenautomats?<br />
Vielleicht - unter anderem - Slots? Im Sinne von</p>
<pre><code class="language-cpp">class slot{
  public:
     mygetraenk g;
     int anz; 
};
</code></pre>
<p>Du brauchst in der ganzen Aufgabe keine Zeiger, kein <code>new</code> und kein <code>delete</code> soviel ist sicher.</p>
<p>Das mit dem Array treiben wir Dir auch noch aus! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Also: mein Vorschlag: nimm eine einfache Version von getraenk, damit Du den Überblick behältst:</p>
<pre><code class="language-cpp">class getraenk{
public:
  getraenk(std::string n) { name=n; }
  std::string get_name(){ return name; }
private:
  std::string name;
};
</code></pre>
<p>Jetzt bau eine Klasse Flaschenautomat, die &quot;irgendwie&quot; Instanzen von getraenk bevoratet - siehe meinen Vorschlag <code>slot</code> oben.<br />
Sobald Du das Gefühl hast Zeiger benutzen zu muessen (-&gt;, <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="😉"
    /> bist Du auf dem falschen Dampfer.</p>
<p>Happy hacking!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2325119</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2325119</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Tue, 21 May 2013 20:43:41 GMT</pubDate></item><item><title><![CDATA[Reply to Array an Klassenfunktion übergeben on Wed, 22 May 2013 07:20:50 GMT]]></title><description><![CDATA[<p>Ok, leider ist die Aufgabenstellung ein wenig komplexer und diesen Teil habe ich mal in Kurzform aus dem Gesamtprogramm rausgezogen, damit ich das Forum nicht überlaste mit zu vielen Codezeilen.</p>
<p>In der Tat sind in dieser Lektion gerade Zeiger dran, die wir auch benutzen sollen und ja, das Getränk hat genau diese drei Attribute.</p>
<p>Der Getränkeautomt lief schon wunderbar, nur dass ich jetzt halt das Array mit Zeigern auf die Instanzen benutzen soll.</p>
<p>Naja, mal schauen, wie es weitergeht damit <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2325171</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2325171</guid><dc:creator><![CDATA[StingerMKO]]></dc:creator><pubDate>Wed, 22 May 2013 07:20:50 GMT</pubDate></item><item><title><![CDATA[Reply to Array an Klassenfunktion übergeben on Wed, 22 May 2013 09:17:42 GMT]]></title><description><![CDATA[<p>StingerMKO schrieb:</p>
<blockquote>
<p>In der Tat sind in dieser Lektion gerade Zeiger dran, die wir auch benutzen sollen und ja, das Getränk hat genau diese drei Attribute.</p>
<p>Der Getränkeautomt lief schon wunderbar, nur dass ich jetzt halt das Array mit Zeigern auf die Instanzen benutzen soll.</p>
</blockquote>
<p>Hmmm...tja... <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>Na dann! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Ich schätze der Automat soll eigentlich die Getränkeliste beinhalten, oder?<br />
Du hast da schon das etwas widersprüchliche Konstrukt</p>
<pre><code class="language-cpp">class flaschenautomat
{
   //die Attribute
    flaschenautomat* getraenkeliste[3];
   // [...] 
};
</code></pre>
<p>Also ein Array von 3 Zeigern auf flaschenautomat - das soll sicher nicht so sein.</p>
<p>Wahrscheinlich willst Du auch bei <code>getraenkeanzeigen()</code> die Getränke in dem Automaten anzeigen, nicht die in der Liste, die Du mitgibst.<br />
Richtig? Da musst Du nochmal ran.</p>
<p>Viel Erfolg!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2325197</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2325197</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Wed, 22 May 2013 09:17:42 GMT</pubDate></item></channel></rss>