<?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[Auf Vektor eines Objektes zugreifen]]></title><description><![CDATA[<p>Ich programmiere noch nicht so lange und experimentiere gerade mit Vektoren. Jetzt bin ich auf ein Problem gestoßen welches ich nicht lösen kann:</p>
<p>Ich habe eine Klasse. Im Zuge der Erzeugung eines Objektes dieser Klasse wird ein Vektor angelegt (im konkreten Fall ausgelesen).</p>
<pre><code>Class Auto
{   int kilometer;
    int preis;
}
Class Fuhrpark
{   int bezeichnung;                                
    vektor &lt;Auto&gt; LKW;  // Vektor wird bei Initialisierung mit Objekten der Klasse Auto &quot;befüllt
                        // jedenfalls kann ich bei der Initialisierung auf den Vektor zugreifen
                        // LKW[0].kilometer funktioniert jedenfalls
}

int main ()
{
    Fuhrpark Norddeutschland;     // Erzeugen eines Objektes der Klasse Fuhrpark

// Wie kann ich jetzt auf den Vektor zugreifen / Es geht ja nicht wie bei einer Variable
// Norddeutschland.LKW[1].kilometer funktioniert ja hier nicht
}

mit meinem begrenzten Wissen vermute ich, dass es daran liegt, dass der Vektor nur innerhalb des Konstruktors der Klasse Fuhrpark &quot;gültig&quot;
ist. Oder liege ich da falsch?
Muss ich den Vektor dem Heap zuweisen oder ähnliches um ihn später zu nutzen oder kann ich den Vektor ähnlich einer Variablen (Bezeichnung) 
so deklarieren, dass man auf ihn auch außerhalb des Konstruktor zugreifen kann?

Ich hoffe ich liege nicht komplett falsch.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/339463/auf-vektor-eines-objektes-zugreifen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 12 Apr 2026 04:14:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/339463.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 31 Aug 2016 14:53:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Auf Vektor eines Objektes zugreifen on Wed, 31 Aug 2016 14:53:25 GMT]]></title><description><![CDATA[<p>Ich programmiere noch nicht so lange und experimentiere gerade mit Vektoren. Jetzt bin ich auf ein Problem gestoßen welches ich nicht lösen kann:</p>
<p>Ich habe eine Klasse. Im Zuge der Erzeugung eines Objektes dieser Klasse wird ein Vektor angelegt (im konkreten Fall ausgelesen).</p>
<pre><code>Class Auto
{   int kilometer;
    int preis;
}
Class Fuhrpark
{   int bezeichnung;                                
    vektor &lt;Auto&gt; LKW;  // Vektor wird bei Initialisierung mit Objekten der Klasse Auto &quot;befüllt
                        // jedenfalls kann ich bei der Initialisierung auf den Vektor zugreifen
                        // LKW[0].kilometer funktioniert jedenfalls
}

int main ()
{
    Fuhrpark Norddeutschland;     // Erzeugen eines Objektes der Klasse Fuhrpark

// Wie kann ich jetzt auf den Vektor zugreifen / Es geht ja nicht wie bei einer Variable
// Norddeutschland.LKW[1].kilometer funktioniert ja hier nicht
}

mit meinem begrenzten Wissen vermute ich, dass es daran liegt, dass der Vektor nur innerhalb des Konstruktors der Klasse Fuhrpark &quot;gültig&quot;
ist. Oder liege ich da falsch?
Muss ich den Vektor dem Heap zuweisen oder ähnliches um ihn später zu nutzen oder kann ich den Vektor ähnlich einer Variablen (Bezeichnung) 
so deklarieren, dass man auf ihn auch außerhalb des Konstruktor zugreifen kann?

Ich hoffe ich liege nicht komplett falsch.
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2507227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2507227</guid><dc:creator><![CDATA[freshman_Jörg]]></dc:creator><pubDate>Wed, 31 Aug 2016 14:53:25 GMT</pubDate></item><item><title><![CDATA[Reply to Auf Vektor eines Objektes zugreifen on Wed, 31 Aug 2016 15:01:38 GMT]]></title><description><![CDATA[<blockquote>
<p>Es geht ja nicht wie bei einer Variable</p>
</blockquote>
<p>Warum? Es ist eine Variable.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2507228</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2507228</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Wed, 31 Aug 2016 15:01:38 GMT</pubDate></item><item><title><![CDATA[Reply to Auf Vektor eines Objektes zugreifen on Wed, 31 Aug 2016 15:23:15 GMT]]></title><description><![CDATA[<p>Bitte den richtigen Code zeigen. Der jetzige Code enthält offensichtliche Syntaxfehler. Zudem kann ich nicht glauben, dass ein Zugriff auf einen gänzlich uninitialisierten Vector funktioniert haben soll. Ist zwar theoretisch möglich, aber würde nicht mit rechten Dingen zugehen; da muss irgendetwas sein, was du vorher gemacht hast.</p>
<p>Aber wie du dem entnehmen kannst: An sich <strong>muss</strong> der vector irgendwie gefüllt werden, bevor du auf den Inhalt zugreifen kannst. Von alleine entsteht da nichts. Ein Zugriff auf nicht-existierende Inhalte <em>kann</em> funktionieren, wenn man Pech hat. Dann merkt man nicht, dass das Programm fehlerhaft ist. Aber es ist auf jeden Fall ein Fehler.</p>
<p>Inhalte bekommt man auf vielerlei Weise in den vector. Am wohl häufigsten benutzt werden <a href="http://en.cppreference.com/w/cpp/container/vector/push_back" rel="nofollow">push_back</a> (Element hinten anhängen) und die <a href="http://en.cppreference.com/w/cpp/container/vector/vector" rel="nofollow">Konstruktoren</a> des vectors (Da gibt es viele verschiedene. Varianten sind: Ein Element X-Mal erzeugen; einen anderen Vector kopieren; beliebige Datenmengen übernehmen, die irgendwie einen definierten Anfang und Ende haben; eine Liste von Daten übernehmen). Aber auch viele andere Methoden bringen Inhalte in einen vector:<br />
<a href="http://en.cppreference.com/w/cpp/container/vector/operator%3D" rel="nofollow">http://en.cppreference.com/w/cpp/container/vector/operator%3D</a> (Inhalte von anderem Vector übernehmen)<br />
<a href="http://en.cppreference.com/w/cpp/container/vector/assign" rel="nofollow">http://en.cppreference.com/w/cpp/container/vector/assign</a> (ähnliche Varianten wie beim Konstruktor, aber eben auch nach Konstruktion des Vectors nutzbar)<br />
<a href="http://en.cppreference.com/w/cpp/container/vector/insert" rel="nofollow">http://en.cppreference.com/w/cpp/container/vector/insert</a> (Inhalte an bestimmter Stelle einfügen)<br />
<a href="http://en.cppreference.com/w/cpp/container/vector/emplace" rel="nofollow">http://en.cppreference.com/w/cpp/container/vector/emplace</a> (Inhalte an bestimmter Stelle erzeugen)<br />
<a href="http://en.cppreference.com/w/cpp/container/vector/emplace_back" rel="nofollow">http://en.cppreference.com/w/cpp/container/vector/emplace_back</a> (Element hinten erzeugen)<br />
<a href="http://en.cppreference.com/w/cpp/container/vector/resize" rel="nofollow">http://en.cppreference.com/w/cpp/container/vector/resize</a> (Größe ändern, wofür nötigenfalls Kopien eines bestimmten Werts gemacht werden)<br />
<a href="http://en.cppreference.com/w/cpp/container/vector/swap" rel="nofollow">http://en.cppreference.com/w/cpp/container/vector/swap</a> (Inhalte mit anderem Vector tauschen)</p>
<p>Wenn der Vector Member einer Klasse ist, dann möchtest du der Klasse wahrscheinlich einen eigenen Konstruktor mit einer Initialisierungsliste verpassen, um bei Erzeugen der Klasse einen passenden Konstruktor für den Vector aufzurufen. Wenn du nicht weißt, was eine Initialisierungsliste ist: Im Lehrbuch nachgucken oder googeln.</p>
<p>PS: Aber ansonsten ist, wie manni66 schon sagte, absolut kein Unterschied zu anderen Variablen. Es ist eine ganz normales Objekt, wie alle¹ anderen auch. Und auf alles anderen Objekte solltest du auch nie zugreifen, ohne ihnen einen Inhalt gegeben zu haben. Beim vector sind die Möglichkeiten dafür eben besonders vielfältig.</p>
<p>¹: Nun, nicht <em>alle</em> Objekte sind wie alle anderen. Für C-Arrays gelten beispielsweise ein paar Sonderregeln. Aber der Vector ist so wie das, was du als &quot;normale&quot; Objekte bezeichnen würdest.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2507231</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2507231</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 31 Aug 2016 15:23:15 GMT</pubDate></item><item><title><![CDATA[Reply to Auf Vektor eines Objektes zugreifen on Wed, 31 Aug 2016 15:48:41 GMT]]></title><description><![CDATA[<p>Ich denke, das ist eher ein Problem der Sichtbarkeit (<a href="https://en.wikipedia.org/wiki/Access_modifiers" rel="nofollow">Access modifiers</a>), denn innerhalb einer Klasse sind die Member ja erst einmal standardmäßig privat.</p>
<p>Daher zeige bitte immer relevanten Code und Fehlermeldung des Compilers!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2507236</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2507236</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Wed, 31 Aug 2016 15:48:41 GMT</pubDate></item><item><title><![CDATA[Reply to Auf Vektor eines Objektes zugreifen on Wed, 31 Aug 2016 16:28:35 GMT]]></title><description><![CDATA[<p>Ich danke euch schonmal - wenn man gesagt bekommt das muss eigentlich klappen, dann tun sich manchmal Wege auf. Ich denke mein Fehler war, dass ich den Vektor innerhalb des Konstruktors befüllt habe. Das sah <strong>verkürzt</strong> so aus:</p>
<pre><code>Fuhrpark::Fuhrpark(void)
{
    int bezeichnung = Norddeutschland; 
    vector &lt;Auto&gt; LKW;

    ifstream datei (&quot;......LKW.txt&quot;);
    while (datei &gt;&gt; kilometer &gt;&gt; Char&lt;';'&gt; &gt;&gt; preis &gt;&gt; Char&lt;';'&gt;;) 
    {   
	Auto neuerLKW (kilometer, preis);
	LKW.push_back(neuerLKW);
    }
}
</code></pre>
<p><strong>Hier liegt wahrscheinlich der Fehler, oder?</strong> / will euch nicht mit dem kompletten Code der verschiedenen Dateien quälen. Das wäre zu lang.</p>
<p>Das es funktioniert hab ich am einfachen Beispiel probiert:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;vector&gt;

using namespace std;

class Auto
{public:
    int kilometer = 100;
    int preis = 200;
};

class Fuhrpark
{public:
    Fuhrpark()
    {
        methode();
    }
    int bezeichnung;
    vector &lt;Auto&gt; LKW;

    void methode ()
    {
        Auto A;
        Auto B;
        LKW.push_back(A);
        LKW.push_back(B);
        cout &lt;&lt; LKW[0].kilometer &lt;&lt; endl;
    }
};

int main()
{
    Fuhrpark Deutschland;
    Deutschland.methode();

    return 0;
}
</code></pre>
<p>Es funktioniert wie von manni vorrausgesagt!</p>
<p>@ Sepp: der Vektor war schon befüllt - hab auch in der while-Schleife beim einlesen durch ausgabe testen lassen (nicht mit im Code - wäre sonst zu lang geworden)</p>
<p>Ich erstell jetzt den Vektor durch eine Methode - das scheint ja zu klappen / ich bin mal gespannt</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2507243</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2507243</guid><dc:creator><![CDATA[freshman_Jörg]]></dc:creator><pubDate>Wed, 31 Aug 2016 16:28:35 GMT</pubDate></item><item><title><![CDATA[Reply to Auf Vektor eines Objektes zugreifen on Wed, 31 Aug 2016 16:37:02 GMT]]></title><description><![CDATA[<blockquote>
<p>Wenn der Vector Member einer Klasse ist, dann möchtest du der Klasse wahrscheinlich einen eigenen Konstruktor mit einer Initialisierungsliste verpassen, um bei Erzeugen der Klasse einen passenden Konstruktor für den Vector aufzurufen. Wenn du nicht weißt, was eine Initialisierungsliste ist: Im Lehrbuch nachgucken oder googeln.</p>
</blockquote>
<p>Man sollte sich schon genau überlegen ob man Initialisierungslisten für einen Konstruktor verwendet.<br />
Wenn Mehrdeutigkeiten entstehen wird kompromisslos zugunsten des Initialisierungslisten-Konstruktors aufgelöst. Bezogen auf das obige Beispiel: Definiere für <em>Auto</em> einen impliziten cast nach int und <em>Fuhrpark</em> könnte nie wieder Konstruktor für den Member <em>bezeichnung</em> annehmen.<br />
Zugegeben, der cast mag für das Beispiel lächerlich sein. Es existiert aber nun mal eine unnötige Abhängigkeit von Typparameter T, die maßgeblich beeinflusst ob ein Konstruktor überhaupt noch aufrufbar ist.<br />
Ein std::vector als Argument verursacht solche Probleme nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2507246</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2507246</guid><dc:creator><![CDATA[neyize]]></dc:creator><pubDate>Wed, 31 Aug 2016 16:37:02 GMT</pubDate></item><item><title><![CDATA[Reply to Auf Vektor eines Objektes zugreifen on Wed, 31 Aug 2016 16:45:41 GMT]]></title><description><![CDATA[<blockquote>
<p>Ein std::vector als Argument verursacht solche Probleme nicht.</p>
</blockquote>
<p>Hier liegt der Hund im Pfeffer begraben - Ich danke euch für eure Geduld mit mir!</p>
<p>Ich hab als Anfänger zwar schon mit Namensräumen experimentiert aber da ich erstmals jetzt versuche wirklich OO zu programmieren und h. sowie cpp. Dateien zu erstellen habe ich das wohl ganz verhauen und mich auf andere sachen konzentriert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2507247</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2507247</guid><dc:creator><![CDATA[freshman_Jörg]]></dc:creator><pubDate>Wed, 31 Aug 2016 16:45:41 GMT</pubDate></item><item><title><![CDATA[Reply to Auf Vektor eines Objektes zugreifen on Wed, 31 Aug 2016 17:28:11 GMT]]></title><description><![CDATA[<p>freshman_Jörg schrieb:</p>
<blockquote>
<blockquote>
<p>Ein std::vector als Argument verursacht solche Probleme nicht.</p>
</blockquote>
<p>Hier liegt der Hund im Pfeffer begraben - Ich danke euch für eure Geduld mit mir!</p>
<p>Ich hab als Anfänger zwar schon mit Namensräumen experimentiert aber da ich erstmals jetzt versuche wirklich OO zu programmieren und h. sowie cpp. Dateien zu erstellen habe ich das wohl ganz verhauen und mich auf andere sachen konzentriert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /></p>
</blockquote>
<p>Hier kannst du dir bei Bedarf mal den Zugriff via Indexoperator ansehen.</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;vector&gt;

class Auto
{
	friend std::ostream&amp; operator&lt;&lt;(std::ostream&amp;, const Auto&amp;);

	int kilometer;
	int preis;

public:
	Auto(int km = {}, int pr = {}) noexcept
		: kilometer{ km }, preis{ pr } { }
};

std::ostream&amp; operator&lt;&lt;(std::ostream&amp; os, const Auto&amp; a) {
	return (os &lt;&lt; a.kilometer &lt;&lt; ' ' &lt;&lt; a.preis);
}

class Fuhrpark
{
	int bezeichnung;
	std::vector&lt;Auto&gt; lkw;

public:
	Fuhrpark(int bz) noexcept
		: bezeichnung{ bz } { }

	Auto&amp; operator[](int n) {
		if (n &lt; 0 || n &gt;= lkw.size())
			throw std::out_of_range{ &quot;Indexueberschreitung.&quot; };
		return lkw[n];
	}

	Fuhrpark&amp; add(const Auto&amp; a) {
		lkw.push_back(a);
		return *this;
	}

	decltype(auto) size() const { return lkw.size(); }

	decltype(auto) begin() { return lkw.begin(); }
	decltype(auto) end() { return lkw.end(); }

	using size_type = std::vector&lt;Auto&gt;::size_type;
};
int main(int argc, char** argv) {
	Fuhrpark norddeutschland{ 1 };
	norddeutschland.add(Auto{ 10, 89000 })
		.add(Auto{ 89, 90000 })
		.add(Auto{ 100,40000 });

	for (Fuhrpark::size_type i = 0; i &lt; norddeutschland.size(); ++i)
		std::cout &lt;&lt; norddeutschland[i] &lt;&lt; std::endl;

	//	Alternativ:
	for (auto const&amp; it : norddeutschland)
		std::cout &lt;&lt; it &lt;&lt; std::endl;

	std::cin.clear();
	return std::cin.get();
}
</code></pre>
<p>Der Code ist in wenigen Sekunden entstanden und sollte nicht genauer untersucht werden als nötig. Für Lernzwecke kann man das vielleicht noch grade so als ausreichend bezeichnen. <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/2507257</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2507257</guid><dc:creator><![CDATA[neyize]]></dc:creator><pubDate>Wed, 31 Aug 2016 17:28:11 GMT</pubDate></item></channel></rss>