<?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[Speicherfehler durch Klassenvariablen - wieso?]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich fange gerade an, mich als Einsteiger mit Klassen zu befassen.</p>
<p>Zur Übung möchte ich einen kleinen Vokabeltrainer mit einer GUI (QT) basteln.</p>
<p>Ich habe nun ein Problem, welches ich nicht wirklich verstehe / lösen kann.</p>
<p>Wenn das Programm so läuft kommt ein &quot;GLIBC detected&quot; und es stürzt ab.</p>
<p>Es scheint an den privaten Klassenvariablen zu liegen.<br />
Wenn ich diese in der &quot;vokabel.cpp&quot; deklariere funktioniert das Programm, aber dann sind es ja globale Klassenvariablen und ich brauche ja Instanzvariablen.</p>
<p>So sieht der Code aus:</p>
<p>main.cpp:</p>
<pre><code>#include &quot;mainwindow.h&quot;
#include &lt;QApplication&gt;

#include &quot;vokabel.h&quot;
#include &lt;iostream&gt;

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    int anzahlVokabeln=10;
    Vokabel **Vokab = new Vokabel*[anzahlVokabeln];
    for (int i=0; i&lt;anzahlVokabeln; i++)
    {
        Vokab[i]-&gt;SetVokabel(&quot;hallo&quot;,&quot;hallo1&quot;,&quot;hallo2&quot;,&quot;hallo3&quot;); //Aufruf löst GLIBC aus
    }

    return a.exec();
}
</code></pre>
<p>vokabel.h</p>
<pre><code>#ifndef VOKABEL_H
#define VOKABEL_H

#include &lt;QObject&gt;
#include &lt;string&gt;

class Vokabel : public QObject
{
    Q_OBJECT

public:
    explicit Vokabel(QObject *parent = 0);

    void SetVokabel(std::string vokSE, std::string zusSE, std::string vokDE, std::string zusDE);

private:
  std::string vokabelSE;
  std::string zusatzSE;
  std::string vokabelDE;
  std::string zusatzDE;

};

#endif // VOKABEL_H
</code></pre>
<p>vokabel.cpp</p>
<pre><code>#include &quot;vokabel.h&quot;
#include &lt;string&gt;
#include &lt;iostream&gt;

Vokabel::Vokabel(QObject *parent) :
    QObject(parent)
{

}

void Vokabel::SetVokabel(std::string vokSE, std::string zusSE, std::string vokDE, std::string zusDE)
{
    vokabelDE = vokDE;
    vokabelSE = vokSE;
    zusatzDE  = zusDE;
    zusatzSE =  zusSE;
}
</code></pre>
<p>Wo steckt der Fehler bzw. wie kann ich ihn beseitigen?</p>
<p>Eine kleine andere Frage hätte ich da ebenfalls noch.<br />
Diese Schreibweise habe ich so im Netz gefunden: &quot;Vokabel **Vokab = new Vokabel*[anzahlVokabeln];&quot;<br />
Was bedeutet das doppelte Sternchen?<br />
Ein einfaches ist ja für einen Pointer und was machen zwei Sterne hintereinander?</p>
<p>Vielen Dank <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/topic/332280/speicherfehler-durch-klassenvariablen-wieso</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 06:36:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/332280.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 19 Apr 2015 19:20:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Speicherfehler durch Klassenvariablen - wieso? on Sun, 19 Apr 2015 19:20:11 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich fange gerade an, mich als Einsteiger mit Klassen zu befassen.</p>
<p>Zur Übung möchte ich einen kleinen Vokabeltrainer mit einer GUI (QT) basteln.</p>
<p>Ich habe nun ein Problem, welches ich nicht wirklich verstehe / lösen kann.</p>
<p>Wenn das Programm so läuft kommt ein &quot;GLIBC detected&quot; und es stürzt ab.</p>
<p>Es scheint an den privaten Klassenvariablen zu liegen.<br />
Wenn ich diese in der &quot;vokabel.cpp&quot; deklariere funktioniert das Programm, aber dann sind es ja globale Klassenvariablen und ich brauche ja Instanzvariablen.</p>
<p>So sieht der Code aus:</p>
<p>main.cpp:</p>
<pre><code>#include &quot;mainwindow.h&quot;
#include &lt;QApplication&gt;

#include &quot;vokabel.h&quot;
#include &lt;iostream&gt;

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    int anzahlVokabeln=10;
    Vokabel **Vokab = new Vokabel*[anzahlVokabeln];
    for (int i=0; i&lt;anzahlVokabeln; i++)
    {
        Vokab[i]-&gt;SetVokabel(&quot;hallo&quot;,&quot;hallo1&quot;,&quot;hallo2&quot;,&quot;hallo3&quot;); //Aufruf löst GLIBC aus
    }

    return a.exec();
}
</code></pre>
<p>vokabel.h</p>
<pre><code>#ifndef VOKABEL_H
#define VOKABEL_H

#include &lt;QObject&gt;
#include &lt;string&gt;

class Vokabel : public QObject
{
    Q_OBJECT

public:
    explicit Vokabel(QObject *parent = 0);

    void SetVokabel(std::string vokSE, std::string zusSE, std::string vokDE, std::string zusDE);

private:
  std::string vokabelSE;
  std::string zusatzSE;
  std::string vokabelDE;
  std::string zusatzDE;

};

#endif // VOKABEL_H
</code></pre>
<p>vokabel.cpp</p>
<pre><code>#include &quot;vokabel.h&quot;
#include &lt;string&gt;
#include &lt;iostream&gt;

Vokabel::Vokabel(QObject *parent) :
    QObject(parent)
{

}

void Vokabel::SetVokabel(std::string vokSE, std::string zusSE, std::string vokDE, std::string zusDE)
{
    vokabelDE = vokDE;
    vokabelSE = vokSE;
    zusatzDE  = zusDE;
    zusatzSE =  zusSE;
}
</code></pre>
<p>Wo steckt der Fehler bzw. wie kann ich ihn beseitigen?</p>
<p>Eine kleine andere Frage hätte ich da ebenfalls noch.<br />
Diese Schreibweise habe ich so im Netz gefunden: &quot;Vokabel **Vokab = new Vokabel*[anzahlVokabeln];&quot;<br />
Was bedeutet das doppelte Sternchen?<br />
Ein einfaches ist ja für einen Pointer und was machen zwei Sterne hintereinander?</p>
<p>Vielen Dank <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/2450895</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450895</guid><dc:creator><![CDATA[Einsteiger123]]></dc:creator><pubDate>Sun, 19 Apr 2015 19:20:11 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfehler durch Klassenvariablen - wieso? on Sun, 19 Apr 2015 19:41:38 GMT]]></title><description><![CDATA[<p>Ein <code>Vokabel**</code> ist ein Zeiger auf einen Zeiger auf ein <code>Vokabel</code> .<br />
Dein Programm stürzt ab weil du über nicht initialisierte Zeiger auf <code>Vokabel</code> zugreifst die nicht existieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450898</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 19 Apr 2015 19:41:38 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfehler durch Klassenvariablen - wieso? on Sun, 19 Apr 2015 19:53:42 GMT]]></title><description><![CDATA[<p>Hmm...</p>
<p>Irgendwie verstehe ich das nicht.<br />
Ein Zeiger auf einen Zeiger kann ich mir vorstellen.</p>
<p>Wieso funktioniert das Programm denn, wenn ich die Variablen in der vokabel.cpp deklariere?</p>
<p>Könnte ich vielleicht einen Tipp bekommen, wie ich den Fehler beseitigen kann?</p>
<p>Ich stehe echt auf dem Schlauch <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>Danke <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/2450902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450902</guid><dc:creator><![CDATA[Einsteiger123]]></dc:creator><pubDate>Sun, 19 Apr 2015 19:53:42 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfehler durch Klassenvariablen - wieso? on Sun, 19 Apr 2015 21:51:19 GMT]]></title><description><![CDATA[<p>Erstmal ein oder mehrere &quot;Vokabel&quot; erzeugen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450907</guid><dc:creator><![CDATA[tkausl]]></dc:creator><pubDate>Sun, 19 Apr 2015 21:51:19 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfehler durch Klassenvariablen - wieso? on Mon, 20 Apr 2015 09:27:07 GMT]]></title><description><![CDATA[<p>Ich probiere es seit mehreren Stunden, aber ich bekomme es nicht hin.</p>
<p>Nun habe ich einen anderen Ansatz probiert.<br />
Ich möchte die Objekte einfach in einen Vektor packen.</p>
<p>Nun bekomme ich allerdings einen neuen Fehler, der wohl mit meinen Konsturktoren zusammenhängt.<br />
Allerdings stehe ich hier auch wieder voll auf dem Schlauch.</p>
<p>Der Fehler ist nun: &quot;Use of deleted function 'Vokabel::Vokabel(const Vokabel&amp;)'&quot;</p>
<p>Kann mir jemand erklären, warum der Fehler auftritt und wie man ihn beseitigt?</p>
<p>So sieht der Code nun aus:</p>
<p>main.cpp</p>
<pre><code>#include &quot;mainwindow.h&quot;
#include &lt;QApplication&gt;

#include &quot;vokabel.h&quot;
#include &lt;iostream&gt;
#include &lt;vector&gt;

void fillVector(std::vector&lt;Vokabel&gt; &amp;objektvektor)
{
    for (int i=0; i&lt;10; i++)
    {
        Vokabel vok(&quot;Hallo&quot;, &quot;hey&quot;, &quot;bla&quot;, &quot;blub&quot;);
        objektvektor.push_back(vok);
    }
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    std::vector&lt;Vokabel&gt; vecOfVoks;
    fillVector(vecOfVoks);

    return a.exec();
}
</code></pre>
<p>vokabel.h</p>
<pre><code>#ifndef VOKABEL_H
#define VOKABEL_H

#include &lt;QObject&gt;
#include &lt;string&gt;

class Vokabel : public QObject
{
    Q_OBJECT

public:
    explicit Vokabel(QObject *parent = 0);

    //Überladener Konstruktor
    Vokabel(std::string vokSE, std::string zusSE, std::string vokDE, std::string zusDE);

    //Destructor:
    ~Vokabel();

    void SetVokabel(std::string vokSE, std::string zusSE, std::string vokDE, std::string zusDE);

private:
  std::string vokabelSE;
  std::string zusatzSE;
  std::string vokabelDE;
  std::string zusatzDE;

};

#endif // VOKABEL_H
</code></pre>
<p>vokabel.cpp</p>
<pre><code>#include &quot;vokabel.h&quot;
#include &lt;string&gt;
#include &lt;iostream&gt;

Vokabel::Vokabel(QObject *parent) :
    QObject(parent)
{}

//Überladener Konstruktor
Vokabel::Vokabel(std::string vokSE, std::string zusSE, std::string vokDE, std::string zusDE)
{
    vokabelDE = vokDE;
    vokabelSE = vokSE;
    zusatzDE  = zusDE;
    zusatzSE =  zusSE;
}

//Destruktor:
Vokabel::~Vokabel()
{

}

void Vokabel::SetVokabel(std::string vokSE, std::string zusSE, std::string vokDE, std::string zusDE)
{
    vokabelDE = vokDE;
    vokabelSE = vokSE;
    zusatzDE  = zusDE;
    zusatzSE  = zusSE;
}
</code></pre>
<p>Vielen Dank <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/2450937</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450937</guid><dc:creator><![CDATA[Einsteiger123]]></dc:creator><pubDate>Mon, 20 Apr 2015 09:27:07 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfehler durch Klassenvariablen - wieso? on Mon, 20 Apr 2015 09:37:23 GMT]]></title><description><![CDATA[<p>Warum ist Vokabel ein QObject? Das dürfte wohl der Haken sein.</p>
<p>Wenn du tatsächlich gerade mit Klassen anfängst, solltest du von Qt noch die Finger lassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450939</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450939</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Mon, 20 Apr 2015 09:37:23 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfehler durch Klassenvariablen - wieso? on Mon, 20 Apr 2015 09:42:04 GMT]]></title><description><![CDATA[<p>Einsteiger123 schrieb:</p>
<blockquote>
<p>Der Fehler ist nun: &quot;Use of deleted function 'Vokabel::Vokabel(const Vokabel&amp;)'&quot;</p>
<p>Kann mir jemand erklären, warum der Fehler auftritt und wie man ihn beseitigt?</p>
</blockquote>
<p>Warum er auftritt: Es wird ein Copy-Ctor benötigt (für vector), der 'deleted' wurde.<br />
Beseitigen: Copy-Ctor nicht 'deleten'</p>
<p>Soweit, so klar.<br />
Warum der Ctor deleted wurde, liegt daran, dass der Kompiler nicht mehr die Std-Konstruktoren erzeugt, sobald du eigene definierst.<br />
Abhilfe:</p>
<pre><code>Vokabel(const Vokabel&amp;) = default;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2450940</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450940</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Mon, 20 Apr 2015 09:42:04 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfehler durch Klassenvariablen - wieso? on Mon, 20 Apr 2015 10:04:02 GMT]]></title><description><![CDATA[<p>Jockelx schrieb:</p>
<blockquote>
<p>Warum der Ctor deleted wurde, liegt daran, dass der Kompiler nicht mehr die Std-Konstruktoren erzeugt, sobald du eigene definierst.</p>
</blockquote>
<p>Eigene &quot;normale&quot; Konstruktoren verhindern nicht dass ein Copy-Ctorerzeugt wird.<br />
Ich nehme eher an dass hier <code>QObject</code> irgendwie dreinpuscht.</p>
<p>(@Einsteiger123: Wieso leitest du überhaupt von <code>QObject</code> ab?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450943</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450943</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 20 Apr 2015 10:04:02 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfehler durch Klassenvariablen - wieso? on Mon, 20 Apr 2015 10:12:52 GMT]]></title><description><![CDATA[<p>Oh ja, hab nur den Konstruktor &amp; die Fehlermeldung gesehen und dann so eine Std-Antwort geschrieben.</p>
<p>Der Copy-Ctor wird deleted sein, weil QObeject wohl keinen Copy-Ctor hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450944</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450944</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Mon, 20 Apr 2015 10:12:52 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfehler durch Klassenvariablen - wieso? on Mon, 20 Apr 2015 10:27:27 GMT]]></title><description><![CDATA[<p>Erstmal vielen Dank für die Antworten <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>Vermutlich sollte ich mich erstmal mit reinem C++ befassen, aber die GUI-Elemente von QT sind einfach toll und das &quot;Signal und Slot&quot;-Konzept ist klasse!</p>
<p>Vokabel wurde von QObject abgeleitet, um später Signale und Slots mit der Vokabelklasse nutzen zu können.</p>
<p>Kopierkonstruktoren habe ich nachgeschlagen.</p>
<p>Im Zusammenhang mit QObject habe ich nun folgendes gefunden:</p>
<blockquote>
<p>QObject has neither a copy constructor nor an assignment operator. This is by design. Actually, they are declared, but in a private section with the macro Q_DISABLE_COPY(). In fact, all Qt classes derived from QObject (direct or indirect) use this macro to declare their copy constructor and assignment operator to be private. The reasoning is found in the discussion on Identity vs Value on the Qt Object Model page.</p>
</blockquote>
<p>Das heißt dann wohl, dass ich die Ableitung von QObject entfernen muss und eine zweite Klasse für Signale und Slots brauche, richtig?</p>
<p>Danke nochmals für die Hilfe <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/2450946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450946</guid><dc:creator><![CDATA[Einsteiger123]]></dc:creator><pubDate>Mon, 20 Apr 2015 10:27:27 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfehler durch Klassenvariablen - wieso? on Mon, 20 Apr 2015 10:38:41 GMT]]></title><description><![CDATA[<p>Einsteiger123 schrieb:</p>
<blockquote>
<p>... das &quot;Signal und Slot&quot;-Konzept ist klasse!</p>
</blockquote>
<p>Nein, das ist grauenvoller Mist (wie du ja auch schon selber feststellen musstest)!</p>
<p>Einsteiger123 schrieb:</p>
<blockquote>
<p>Vokabel wurde von QObject abgeleitet, um später Signale und Slots mit der Vokabelklasse nutzen zu können.</p>
</blockquote>
<p>Welchen Zweck sollen den Signals/Slots an einer Vokabelklasse haben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2450947</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450947</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Mon, 20 Apr 2015 10:38:41 GMT</pubDate></item><item><title><![CDATA[Reply to Speicherfehler durch Klassenvariablen - wieso? on Mon, 20 Apr 2015 10:52:32 GMT]]></title><description><![CDATA[<p>manni66 schrieb:</p>
<blockquote>
<p>Einsteiger123 schrieb:</p>
<blockquote>
<p>... das &quot;Signal und Slot&quot;-Konzept ist klasse!</p>
</blockquote>
<p>Nein, das ist grauenvoller Mist (wie du ja auch schon selber feststellen musstest)!</p>
</blockquote>
<p>Also Momentan finde ich es noch toll und sehe für C++ mit einer GUI keine richtige Alternative zu Qt.<br />
Ich habe mich zumindest schon ein bisschen in die GUI-Funktionalitäten eingearbeitet und werde bei Qt bleiben.</p>
<p>manni66 schrieb:</p>
<blockquote>
<p>Einsteiger123 schrieb:</p>
<blockquote>
<p>Vokabel wurde von QObject abgeleitet, um später Signale und Slots mit der Vokabelklasse nutzen zu können.</p>
</blockquote>
<p>Welchen Zweck sollen den Signals/Slots an einer Vokabelklasse haben?</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> Ich gebe zu, das war nicht wirklich durchdacht und ich kann hier darauf verzichten. Und für die Zukunft weiß ich nun auch, dass QObject keine Kopierkonstruktoren zulässt <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/2450951</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2450951</guid><dc:creator><![CDATA[Einsteiger123]]></dc:creator><pubDate>Mon, 20 Apr 2015 10:52:32 GMT</pubDate></item></channel></rss>