<?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[Zugriffsverletzung Vektor Klasse]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgende Einstiegsklasse, die alles weitere aufruft:</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;
#include &quot;Rezeptbuch.h&quot;
#include &quot;Misch_Rezeptbuch.h&quot;
class Control;
class CocktailPro
{

   private:
	   Misch_Rezeptbuch* MyRezeptbuch;
	   Control *control;	   
public:	
	CocktailPro();
	   ~CocktailPro();
	   void Menu(); 
};
CocktailPro::CocktailPro()
{
	// das Rezeptbuch anlegen
	Misch_Rezeptbuch* MyRezeptbuch = new Misch_Rezeptbuch();
	Menu();
}
CocktailPro::~CocktailPro()
{
	delete MyRezeptbuch; 
}

void CocktailPro::Menu()
{

	// Rezeptliste ausgeben
	cout &lt;&lt; &quot;*********************************************&quot; &lt;&lt; endl;
	MyRezeptbuch-&gt;ausgeben();
	cout &lt;&lt; &quot;*********************************************&quot; &lt;&lt; endl;

	// Rezeptschritte abfragen
	MyRezeptbuch-&gt;rezeptschritte_ausgeben();

}
</code></pre>
<p>Bei der Methode &quot;ausgeben()&quot; bekomme ich die Zugriffsverletzung.<br />
DIe Klasse Misch_Rezeptbuch erbt von der Klasse Rezeptbuch.<br />
Die Methode aussortieren, schmeißt die Coktails welche nicht hergestellt werden können aus dem Vektor. Wenn ich nun die MEthode &quot;ausgeben()&quot; im Konstuktor von Misch_Rezeptbuch aufrufe klappt es.<br />
In die Klasse Rezeptbuch, habe ich keine Einsicht, da diese als *.obj gelinkt wird.</p>
<pre><code>Fehlermeldung:

this	0xcdcdcdcd {vergleich=[...]() zutaten=[...]() }	Misch_Rezeptbuch * const
Rezeptbuch	{m_Rezepte=[...](... }	Rezeptbuch
__vfptr	CXX0030: Fehler: Ausdruck kann nicht ausgewertet werden
</code></pre>
<pre><code class="language-cpp">#include &quot;Rezeptbuch.h&quot;
class Misch_Rezeptbuch: public Rezeptbuch

{

     private:
     vector&lt;int&gt; vergleich;
     vector&lt;string&gt; zutaten;

   public:
   Misch_Rezeptbuch();
   void aussortieren();
   void ausgeben();
   void rezeptschritte_ausgeben();
   void zutaten_einlesen();
   void zutaten_ausgeben();

};

#include &quot;Misch_Rezeptbuch.h&quot;
Misch_Rezeptbuch::Misch_Rezeptbuch()

{
    zutaten_einlesen();
    zutaten_ausgeben();
    aussortieren();
}
void Misch_Rezeptbuch::aussortieren()
{

    cout &lt;&lt; &quot;*********************************************&quot; &lt;&lt; endl;
    for (int i=0; i&lt;GetAnzahlRezepte(); i++) // f�r jedes Rezept...
    {
        Rezept* r = GetRezept(i);

        for (int j=0; j&lt;r-&gt;GetAnzahlRezeptschritte(); j++) // f�r jeden Rezeptschritt...
        {
            bool state = false;
            Rezeptschritt* rs = r-&gt;GetRezeptSchritt(j);
            string Zutat = rs-&gt;getM_Zutat();

            for (size_t k=0;k&lt;zutaten.size();k++)
            {
                //Zutat == steht im Rezept mit Mischen und Stampfen
                 //zutaten[] == vector im Zutaten aus datei ohen Mischen und Stampfen.
                if (Zutat==zutaten[k] || Zutat==&quot;Mischen&quot; || Zutat==&quot;Stampfen&quot;)
                {
                    state = true;
                    break;
                }
            }
            if(!state) //false
            {
                vergleich.push_back(i);
                cout &lt;&lt; i &lt;&lt; &quot;. &quot; &lt;&lt;r-&gt;getName() &lt;&lt; &quot; -&gt; KANN NICHT HERGESTELLT WERDEN&quot; &lt;&lt;endl;
                break;
            }
        }
    }

    for (size_t i=0;i&lt;vergleich.size();i++)
    {   
        Rezept* r = GetRezept(vergleich[i]-i);
        // -i ganz wichtig
        bool test = DeleteRezept(vergleich[i]-i);
        if (test)
        {
            cout &lt;&lt; r-&gt;getName() &lt;&lt; &quot; -&gt; Wird geloescht&quot; &lt;&lt; endl;
        }
        else
        {
            cout &lt;&lt; r-&gt;getName() &lt;&lt; &quot; -&gt; Konnte nicht geloescht werden&quot;&lt;&lt;endl;
        }   
    }
}

void Misch_Rezeptbuch::ausgeben()

{
	cout &lt;&lt; &quot;Es gibt &quot; &lt;&lt; GetAnzahlRezepte() &lt;&lt; &quot; Cocktails&quot; &lt;&lt; endl;

    for (size_t i=0; i&lt;GetAnzahlRezepte(); i++)
    {
        Rezept* r = GetRezept(i);
        cout &lt;&lt; i &lt;&lt; &quot;. &quot; &lt;&lt; r-&gt;getName() &lt;&lt; endl;
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/257338/zugriffsverletzung-vektor-klasse</link><generator>RSS for Node</generator><lastBuildDate>Thu, 10 Sep 2026 09:47:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/257338.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 26 Dec 2009 23:18:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zugriffsverletzung Vektor Klasse on Sat, 26 Dec 2009 23:36:37 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgende Einstiegsklasse, die alles weitere aufruft:</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;
#include &quot;Rezeptbuch.h&quot;
#include &quot;Misch_Rezeptbuch.h&quot;
class Control;
class CocktailPro
{

   private:
	   Misch_Rezeptbuch* MyRezeptbuch;
	   Control *control;	   
public:	
	CocktailPro();
	   ~CocktailPro();
	   void Menu(); 
};
CocktailPro::CocktailPro()
{
	// das Rezeptbuch anlegen
	Misch_Rezeptbuch* MyRezeptbuch = new Misch_Rezeptbuch();
	Menu();
}
CocktailPro::~CocktailPro()
{
	delete MyRezeptbuch; 
}

void CocktailPro::Menu()
{

	// Rezeptliste ausgeben
	cout &lt;&lt; &quot;*********************************************&quot; &lt;&lt; endl;
	MyRezeptbuch-&gt;ausgeben();
	cout &lt;&lt; &quot;*********************************************&quot; &lt;&lt; endl;

	// Rezeptschritte abfragen
	MyRezeptbuch-&gt;rezeptschritte_ausgeben();

}
</code></pre>
<p>Bei der Methode &quot;ausgeben()&quot; bekomme ich die Zugriffsverletzung.<br />
DIe Klasse Misch_Rezeptbuch erbt von der Klasse Rezeptbuch.<br />
Die Methode aussortieren, schmeißt die Coktails welche nicht hergestellt werden können aus dem Vektor. Wenn ich nun die MEthode &quot;ausgeben()&quot; im Konstuktor von Misch_Rezeptbuch aufrufe klappt es.<br />
In die Klasse Rezeptbuch, habe ich keine Einsicht, da diese als *.obj gelinkt wird.</p>
<pre><code>Fehlermeldung:

this	0xcdcdcdcd {vergleich=[...]() zutaten=[...]() }	Misch_Rezeptbuch * const
Rezeptbuch	{m_Rezepte=[...](... }	Rezeptbuch
__vfptr	CXX0030: Fehler: Ausdruck kann nicht ausgewertet werden
</code></pre>
<pre><code class="language-cpp">#include &quot;Rezeptbuch.h&quot;
class Misch_Rezeptbuch: public Rezeptbuch

{

     private:
     vector&lt;int&gt; vergleich;
     vector&lt;string&gt; zutaten;

   public:
   Misch_Rezeptbuch();
   void aussortieren();
   void ausgeben();
   void rezeptschritte_ausgeben();
   void zutaten_einlesen();
   void zutaten_ausgeben();

};

#include &quot;Misch_Rezeptbuch.h&quot;
Misch_Rezeptbuch::Misch_Rezeptbuch()

{
    zutaten_einlesen();
    zutaten_ausgeben();
    aussortieren();
}
void Misch_Rezeptbuch::aussortieren()
{

    cout &lt;&lt; &quot;*********************************************&quot; &lt;&lt; endl;
    for (int i=0; i&lt;GetAnzahlRezepte(); i++) // f�r jedes Rezept...
    {
        Rezept* r = GetRezept(i);

        for (int j=0; j&lt;r-&gt;GetAnzahlRezeptschritte(); j++) // f�r jeden Rezeptschritt...
        {
            bool state = false;
            Rezeptschritt* rs = r-&gt;GetRezeptSchritt(j);
            string Zutat = rs-&gt;getM_Zutat();

            for (size_t k=0;k&lt;zutaten.size();k++)
            {
                //Zutat == steht im Rezept mit Mischen und Stampfen
                 //zutaten[] == vector im Zutaten aus datei ohen Mischen und Stampfen.
                if (Zutat==zutaten[k] || Zutat==&quot;Mischen&quot; || Zutat==&quot;Stampfen&quot;)
                {
                    state = true;
                    break;
                }
            }
            if(!state) //false
            {
                vergleich.push_back(i);
                cout &lt;&lt; i &lt;&lt; &quot;. &quot; &lt;&lt;r-&gt;getName() &lt;&lt; &quot; -&gt; KANN NICHT HERGESTELLT WERDEN&quot; &lt;&lt;endl;
                break;
            }
        }
    }

    for (size_t i=0;i&lt;vergleich.size();i++)
    {   
        Rezept* r = GetRezept(vergleich[i]-i);
        // -i ganz wichtig
        bool test = DeleteRezept(vergleich[i]-i);
        if (test)
        {
            cout &lt;&lt; r-&gt;getName() &lt;&lt; &quot; -&gt; Wird geloescht&quot; &lt;&lt; endl;
        }
        else
        {
            cout &lt;&lt; r-&gt;getName() &lt;&lt; &quot; -&gt; Konnte nicht geloescht werden&quot;&lt;&lt;endl;
        }   
    }
}

void Misch_Rezeptbuch::ausgeben()

{
	cout &lt;&lt; &quot;Es gibt &quot; &lt;&lt; GetAnzahlRezepte() &lt;&lt; &quot; Cocktails&quot; &lt;&lt; endl;

    for (size_t i=0; i&lt;GetAnzahlRezepte(); i++)
    {
        Rezept* r = GetRezept(i);
        cout &lt;&lt; i &lt;&lt; &quot;. &quot; &lt;&lt; r-&gt;getName() &lt;&lt; endl;
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1828260</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828260</guid><dc:creator><![CDATA[Krikus]]></dc:creator><pubDate>Sat, 26 Dec 2009 23:36:37 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung Vektor Klasse on Sat, 26 Dec 2009 23:57:03 GMT]]></title><description><![CDATA[<p>Ich tippe auf einen Nullpointer.<br />
Kannst du das nicht mal debuggen und dir mal ausgeben lassen, was GetAnzahlRezepte zurückgibt, und ob wirklich so viele existieren?<br />
Also ob r tatsächlich immer auf ein Rezept zeigt? eine r==NULL Abfrage wäre davor vielleicht sinnvoll.</p>
<p>Das vfptr in der Fehlermeldung steht für &quot;virtual function pointer&quot;. Also wird dein Zeiger vielleicht irgendwo ins Nirvana zeigen.</p>
<p>Ist nur eine Vermutung ^^.<br />
Debug es einfach mal durch und sag uns bitte bescheid wo genau der Fehler kommt. Da können wir den vielleicht etwas eingrenzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1828270</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828270</guid><dc:creator><![CDATA[Max3000]]></dc:creator><pubDate>Sat, 26 Dec 2009 23:57:03 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung Vektor Klasse on Sun, 27 Dec 2009 00:18:10 GMT]]></title><description><![CDATA[<p>Der Fehler kommt beim Aufruf der Methode &quot;ausgeben()&quot; in der Klasse CocktailPro.<br />
Also &quot;GetAnzahlRezepte()&quot; liefert beim Aufruf der Methode&quot;ausgeben()&quot; über die Klasse CoktailPro eine Minus Zahl zurück.</p>
<p>Wenn ich die Methode &quot;ausgeben()&quot; im Konstrucktor von Misch_Rezeptbuch aufrufe klappt es.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1828272</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828272</guid><dc:creator><![CDATA[Krikus]]></dc:creator><pubDate>Sun, 27 Dec 2009 00:18:10 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung Vektor Klasse on Sun, 27 Dec 2009 09:24:53 GMT]]></title><description><![CDATA[<p>Krikus schrieb:</p>
<blockquote>
<p>Wenn ich die Methode &quot;ausgeben()&quot; im Konstrucktor von Misch_Rezeptbuch aufrufe klappt es.</p>
</blockquote>
<p>Dann schau dir mal an warum es funktioniert:</p>
<pre><code class="language-cpp">class CocktailPro
{
   private:
       Misch_Rezeptbuch* MyRezeptbuch;
public:   
    CocktailPro();
};
CocktailPro::CocktailPro()
{
    // das Rezeptbuch anlegen
    Misch_Rezeptbuch* MyRezeptbuch = new Misch_Rezeptbuch(); // &lt;&lt;=== Na was machst du da?
    Menu();
}
</code></pre>
<p>Schau dir den Code an der von mir kommentierten Stelle GENAU (!) an und schau evtl. in deinem Buch nochmal im Kapitel &quot;Sichtbarkeitsbereich von Objekten&quot; nach.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1828311</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828311</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Sun, 27 Dec 2009 09:24:53 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung Vektor Klasse on Sun, 27 Dec 2009 10:03:58 GMT]]></title><description><![CDATA[<p>Irgendwie hab ich nen Brett vorm Kopf.</p>
<p>Ich lege dort dynamisch einen neues Objekt im Heap an.<br />
Wenn ich bei Sichtbarkeiten von Objekten schauen, dann bekomme ich public,private... zur Kapselung in dem Buch angeboten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1828322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828322</guid><dc:creator><![CDATA[Krikus]]></dc:creator><pubDate>Sun, 27 Dec 2009 10:03:58 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung Vektor Klasse on Sun, 27 Dec 2009 10:07:26 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Misch_Rezeptbuch* MyRezeptbuch = new Misch_Rezeptbuch(); // &lt;&lt;=== Na was machst du da?
  //^^^^^^^^^^^^^^^^
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1828324</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828324</guid><dc:creator><![CDATA[OhneName]]></dc:creator><pubDate>Sun, 27 Dec 2009 10:07:26 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung Vektor Klasse on Sun, 27 Dec 2009 10:16:10 GMT]]></title><description><![CDATA[<p>Um es nochmal deutlicher zu machen:</p>
<pre><code class="language-cpp">Object* obj;
{
    // neuer Scope = Sichtbarkeitsbereich
    // dieses obj ist ein neues Objekt! Es heißt nur so wie das äußere
    Object* obj = new Object;
}
// Dieses obj ist nicht initialisiert, das Programm wird mit einer Zugriffsverletzung beendet
// (wenn in der Funktion auf Membervariablen zugegriffen wird)
obj-&gt;crashApp();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1828325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828325</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Sun, 27 Dec 2009 10:16:10 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung Vektor Klasse on Sun, 27 Dec 2009 10:43:28 GMT]]></title><description><![CDATA[<p>l'abra d'or schrieb:</p>
<blockquote>
<p>Um es nochmal deutlicher zu machen:</p>
<pre><code class="language-cpp">Object* obj;
{
    // neuer Scope = Sichtbarkeitsbereich
    // dieses obj ist ein neues Objekt! Es heißt nur so wie das äußere
    Object* obj = new Object;
}
// Dieses obj ist nicht initialisiert, das Programm wird mit einer Zugriffsverletzung beendet
// (wenn in der Funktion auf Membervariablen zugegriffen wird)
obj-&gt;crashApp();
</code></pre>
</blockquote>
<p>Mhhh. Das leuchtet ein. Auch warum es an meinem Beispiel nicht funktioniert,<br />
Hatte solch einen Fehler bis jetzt noch nicht, weiß daher auch nicht wie man so etwas umgeht. Im schlauen Buch steht auch nichts wirkliches brauchbares drin.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1828335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828335</guid><dc:creator><![CDATA[Krikus]]></dc:creator><pubDate>Sun, 27 Dec 2009 10:43:28 GMT</pubDate></item><item><title><![CDATA[Reply to Zugriffsverletzung Vektor Klasse on Sun, 27 Dec 2009 10:46:24 GMT]]></title><description><![CDATA[<p>Krikus schrieb:</p>
<blockquote>
<p>Mhhh. Das leuchtet ein. Auch warum es an meinem Beispiel nicht funktioniert,<br />
Hatte solch einen Fehler bis jetzt noch nicht, weiß daher auch nicht wie man so etwas umgeht. Im schlauen Buch steht auch nichts wirkliches brauchbares drin.</p>
</blockquote>
<p>Indem du das Objekt initialisierst, mit dem du in deiner Klasse auch arbeiten kannst und willst <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>
<pre><code class="language-cpp">CocktailPro::CocktailPro()
{
    MyRezeptbuch = new Misch_Rezeptbuch;
    Menu();
}
</code></pre>
<p>Oder gleich mit Initialisierungsliste:</p>
<pre><code class="language-cpp">CocktailPro::CocktailPro()
 : MyRezeptbuch( new Misch_Rezeptbuch );
{
    Menu();
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1828338</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1828338</guid><dc:creator><![CDATA[l&#x27;abra d&#x27;or]]></dc:creator><pubDate>Sun, 27 Dec 2009 10:46:24 GMT</pubDate></item></channel></rss>