<?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[Aufruf einer vector-Klassenvariable aus einer Methode]]></title><description><![CDATA[<p>Ich habe das Problem, dass ich aus einer Klassenmethode nicht auf eine Klassenvariable vom Typ vector&lt;AndereKlasse&gt; zugreifen kann.</p>
<pre><code class="language-cpp">//data.hpp

class Service {...};

class Data
{
private:
   std::vector&lt;Service&gt; services;
public:
   Data();
   void doSomething();
   //...
};

//data.cpp
Data::Data()
{}

void Data::doSomething()
{
   vector&lt;Service&gt; localServices;
   Service a = new Service();
   localServices.push_back(a);

   Service b = new Service();
   services.push_back(b);
}

//...Aufruf von doSomething()
</code></pre>
<p>Das Erzeugen des neuen Service a und Hinzufügen zu dem lokalen vector localServices funktioniert problemlos. Wenn ich aber den neuen vector b zur Klassenvariable services hinzufügen möchte, bekomme ich in der compile time einen Systemfehler und das Programm bricht ab.</p>
<p>1.) Was kann ich tun? Muss services noch initialisiert werden? Wie? Fehlt sonst noch irgendetwas?<br />
2.) Sollte ich generell lieber einen vector von Pointern auf Objekte anlegen?</p>
<pre><code class="language-cpp">vector&lt;Service*&gt; Services;
</code></pre>
<p>Ich bin dankbar für jede Hilfe.<br />
TommyT</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/240582/aufruf-einer-vector-klassenvariable-aus-einer-methode</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 20:53:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/240582.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 08 May 2009 13:07:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Aufruf einer vector-Klassenvariable aus einer Methode on Fri, 08 May 2009 13:07:38 GMT]]></title><description><![CDATA[<p>Ich habe das Problem, dass ich aus einer Klassenmethode nicht auf eine Klassenvariable vom Typ vector&lt;AndereKlasse&gt; zugreifen kann.</p>
<pre><code class="language-cpp">//data.hpp

class Service {...};

class Data
{
private:
   std::vector&lt;Service&gt; services;
public:
   Data();
   void doSomething();
   //...
};

//data.cpp
Data::Data()
{}

void Data::doSomething()
{
   vector&lt;Service&gt; localServices;
   Service a = new Service();
   localServices.push_back(a);

   Service b = new Service();
   services.push_back(b);
}

//...Aufruf von doSomething()
</code></pre>
<p>Das Erzeugen des neuen Service a und Hinzufügen zu dem lokalen vector localServices funktioniert problemlos. Wenn ich aber den neuen vector b zur Klassenvariable services hinzufügen möchte, bekomme ich in der compile time einen Systemfehler und das Programm bricht ab.</p>
<p>1.) Was kann ich tun? Muss services noch initialisiert werden? Wie? Fehlt sonst noch irgendetwas?<br />
2.) Sollte ich generell lieber einen vector von Pointern auf Objekte anlegen?</p>
<pre><code class="language-cpp">vector&lt;Service*&gt; Services;
</code></pre>
<p>Ich bin dankbar für jede Hilfe.<br />
TommyT</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1707763</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1707763</guid><dc:creator><![CDATA[TommyT]]></dc:creator><pubDate>Fri, 08 May 2009 13:07:38 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer vector-Klassenvariable aus einer Methode on Fri, 08 May 2009 13:52:08 GMT]]></title><description><![CDATA[<p>Wenn du einen Compilerfehler erhälst, wäre es nett, diesen auch zu posten.</p>
<p>Wenn ich deinen Code ein bisschen ins Reine schreib, kompilierts bei mir (MSVC 2008):</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
using namespace std;

class Service {};

class Data
{
private:
   std::vector&lt;Service&gt; services;
public:
   Data();
   void doSomething();
   //...
};

//data.cpp
Data::Data()
{}

void Data::doSomething()
{
   vector&lt;Service&gt; localServices;
   localServices.push_back(Service());

   services.push_back(Service());
}

//...Aufruf von doSomething() 
int main()
{
	Data data;
	data.doSomething();
}
</code></pre>
<p>Zu deinen Fragen: Nein, nein und nein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1707797</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1707797</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Fri, 08 May 2009 13:52:08 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer vector-Klassenvariable aus einer Methode on Fri, 08 May 2009 13:50:53 GMT]]></title><description><![CDATA[<p>TommyT schrieb:</p>
<blockquote>
<p>Wenn ich aber den neuen vector b zur Klassenvariable services hinzufügen möchte, bekomme ich in der compile time einen Systemfehler und das Programm bricht ab</p>
</blockquote>
<p>Was nun: Laufzeit (nur dort kann das Programm abbrechen) oder während der Kompilierung (dort kann die Kompilierung, nicht aber das Programm abbrechen).</p>
<p>Im letzteren Fall bekommst du vom Compiler eine aussagekräftige Fehlermeldung die du uns hier verheimlichst.</p>
<p>Und das folgendes nicht funktioniert ist recht logisch: Elemente die auf dem Heap angelegt werden, werden über Zeiger verwaltet.</p>
<pre><code class="language-cpp">// Fehler:
Service a = new Service();  // new Service() liefert einen Zeiger zurück

// Richtig (einmal als Stackvariable, einmal über Zeiger &amp; Heap)
Service b; // Auf dem Stack, mittels Standardkonstruktor
Service * c = new Service(); // Auf dem Heap
</code></pre>
<p>Dann rate auch mal, wann du einen std::vector&lt;Service&gt; und wann einen std::vector&lt;Service*&gt; brauchst... (Im Ersten Fall wird aber mit vielen Kopien gearbeitet, in letzteren musst du dafür die Freigabe selbst erledigen).</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1707798</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1707798</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Fri, 08 May 2009 13:50:53 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer vector-Klassenvariable aus einer Methode on Sat, 09 May 2009 00:14:09 GMT]]></title><description><![CDATA[<p>Sorry für die Verwirrung.<br />
Das Program bricht mit einem nicht spezifizierten Windows-Error ab, dementsprechend Laufzeitfehler.</p>
<p>Schonmal danke für den Hinweis zur Verwendung von new&amp;co.</p>
<p>Ich verstehe nur nicht warum eine Zuweisung innerhalb der Methode funktioniert, es aber einen Fehler gibt, wenn der Vector class member ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1708009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1708009</guid><dc:creator><![CDATA[TommyT]]></dc:creator><pubDate>Sat, 09 May 2009 00:14:09 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer vector-Klassenvariable aus einer Methode on Sat, 09 May 2009 06:44:59 GMT]]></title><description><![CDATA[<p>TommyT schrieb:</p>
<blockquote>
<p>Sorry für die Verwirrung.<br />
Das Program bricht mit einem nicht spezifizierten Windows-Error ab, dementsprechend Laufzeitfehler.</p>
</blockquote>
<p>Dein Originalcode hätte meiner Meinung nach garnicht erst compiliert werden dürfen. Es sei den dein Beispiel ist zu stark verkürzt und du hast z.B. noch einen Konstruktor der einen Zeiger oder ähnliches annimmt.</p>
<p>Dein Programm (mit einer leeren Serviceklasse) liefert bei mir den folgenden Fehler:</p>
<pre><code>error C2440: 'Initialisierung': 'Service *' kann nicht in 'Service' konvertiert werden
</code></pre>
<p>Wenn du aber einen solchen Konstruktor anbietest...</p>
<pre><code class="language-cpp">Service(Service * p);
</code></pre>
<p>...wäre das geschilderte Verhalten vermutlich zu erklären, da dieser vermutlich ungewollt aufgerufen wird...</p>
<p>Falls aber dein Compiler bereits folgenden Code zulässt, AUSTAUSCHEN:</p>
<pre><code class="language-cpp">// Compiler sofort austauschen, wenn er folgendes ohne Warnungen oder Fehler compiliert!!!
#include &lt;vector&gt;

class Service {};

int main()
{
   std::vector&lt;Service&gt; services;
   Service b = new Service();
   services.push_back(b);
}
</code></pre>
<p>cu André<br />
P.S: Aus reiner Neugier: Welcher Compiler und welche Compilerversion (Alternativ wenn IDE und Compiler gekoppelt sind, deren Bezeichnung und Version).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1708034</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1708034</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Sat, 09 May 2009 06:44:59 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer vector-Klassenvariable aus einer Methode on Sat, 09 May 2009 17:08:43 GMT]]></title><description><![CDATA[<p>Halle André,</p>
<p>Nein eine leere Klasse verwendete ich nicht, daher hatte ich oben auch</p>
<pre><code class="language-cpp">class Service {...};
</code></pre>
<p>gepostet. Die Pünktchen sind in dem Antwortpost aber leider entschwunden.</p>
<p>Tatsächlich stellt die Klasse verschiedene - hier nicht wichtige Attribute und Methoden - zur Verfügung.</p>
<p>Ich verwende Dev-C++ 4.9.9.2 mit gcc 3.4.2. Das Kompilieren deines Beispiels erzeugt erwartungsgemäß den Fehler</p>
<pre><code>conversion from `Service*' to non-scalar type `Service' requested
</code></pre>
<p>Bye.<br />
Thomas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1708248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1708248</guid><dc:creator><![CDATA[TommyT]]></dc:creator><pubDate>Sat, 09 May 2009 17:08:43 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer vector-Klassenvariable aus einer Methode on Mon, 11 May 2009 08:41:49 GMT]]></title><description><![CDATA[<p>Ich habe jetzt die Erzeugung der Service-Instanzen sowohl über den Heap, als auch über den Stack versucht. Dieser Punkt ist jetzt klar.</p>
<p>Das Problem tritt allerdings schon früher auf:</p>
<pre><code class="language-cpp">//data.hpp 

class Service {
//...
}; 

class Data 
{ 
private: 
   std::vector&lt;Service&gt; services; 
public: 
   Data(); 
   void doSomething(); 
   //... 
}; 

//data.cpp 
Data::Data() 
{} 

void Data::doSomething() 
{ 
   std::vector&lt;Service&gt;::iterator it;
   it = services.begin(); 
} 

//...Aufruf von doSomething()
</code></pre>
<p>Dies erzeugt wieder einen Runtime Error.</p>
<p>Könnte es sein, dass der vector hier Probleme mit dem Index hat? Müsste man den vector irgendwie initialisieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1708828</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1708828</guid><dc:creator><![CDATA[TommyT]]></dc:creator><pubDate>Mon, 11 May 2009 08:41:49 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer vector-Klassenvariable aus einer Methode on Mon, 11 May 2009 08:49:35 GMT]]></title><description><![CDATA[<p>Naja, wenn keine einträge in dem Service-Vector sind, und du irgendwas mit NULL anstellst, gibts ebend ein Fehler :Dwäre also schon schön wenn du den vector mit services füllst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1708832</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1708832</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Mon, 11 May 2009 08:49:35 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer vector-Klassenvariable aus einer Methode on Mon, 11 May 2009 09:15:56 GMT]]></title><description><![CDATA[<p>Würde ich ja gerne. Aber</p>
<pre><code class="language-cpp">Service s;
services.push_back(s);
</code></pre>
<p>funktioniert ja eben auch nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1708853</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1708853</guid><dc:creator><![CDATA[TommyT]]></dc:creator><pubDate>Mon, 11 May 2009 09:15:56 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer vector-Klassenvariable aus einer Methode on Mon, 11 May 2009 09:19:16 GMT]]></title><description><![CDATA[<p>Zeig mal deine komplette Deklaration. Weil das verwundert mich jetzt sehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1708857</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1708857</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Mon, 11 May 2009 09:19:16 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer vector-Klassenvariable aus einer Methode on Mon, 11 May 2009 09:51:09 GMT]]></title><description><![CDATA[<p>TommyT schrieb:</p>
<blockquote>
<p>Würde ich ja gerne. Aber ... funktioniert ja eben auch nicht.</p>
</blockquote>
<p>Hallo Doktor, mir tuts irgendwo so merkwürdig weh, wobei es auch kein Schmerz sein könnte, und ich weiß nicht so recht wo.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1708869</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1708869</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Mon, 11 May 2009 09:51:09 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer vector-Klassenvariable aus einer Methode on Mon, 11 May 2009 13:08:21 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>TommyT schrieb:</p>
<blockquote>
<p>Würde ich ja gerne. Aber ... funktioniert ja eben auch nicht.</p>
</blockquote>
</blockquote>
<p>Hierbei bezog ich mich auf auf unseren vorhergehenden Dialog.</p>
<p><strong>Ich habe das Problem nun endlich gelöst.</strong><br />
Verantwortlich waren die folgenden beiden Punkte:</p>
<p>1.) Bei der Definition der Service-Klasse</p>
<pre><code class="language-cpp">class Service { 
//... 
};
</code></pre>
<p>gab es außschließlich einen Konstruktor, welcher verschiedene Argumente verlangt hat. Hier musste noch ein Default-Konstruktur angelegt werden.</p>
<pre><code class="language-cpp">Service::Service() {}

Service::Service(int id, int startTime, int endTime, int startStation, int endStation, int dist) 
{
//...
}
</code></pre>
<p>2.) Die Klasse Data ist nicht korrekt instanziert worden (bzw. die Instanz ist nicht korrekt weitergeleitet worden), so dass bei dem Aufruf von myData.doSomething() Ungereimtheiten aufgetreten sind.</p>
<p>Ich bin froh, dass ich euch das Posten des gesamten Codes nun ersparen konnte und danke euch für eure tatkräftige Unterstützung, insbesondere da ich weiß, dass man es mit einem C++-Neuling wie mir nicht immer leicht hat.</p>
<p>Danke und Bye<br />
Thomas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1708983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1708983</guid><dc:creator><![CDATA[TommyT]]></dc:creator><pubDate>Mon, 11 May 2009 13:08:21 GMT</pubDate></item><item><title><![CDATA[Reply to Aufruf einer vector-Klassenvariable aus einer Methode on Mon, 11 May 2009 13:22:44 GMT]]></title><description><![CDATA[<p>TommyT schrieb:</p>
<blockquote>
<p>Hierbei bezog ich mich auf auf unseren vorhergehenden Dialog.</p>
</blockquote>
<p>Das ist mir bewusst, aber &quot;funktioniert nicht&quot; akzeptieren hier viele nicht als Aussage (ich auch nicht). Weder nennst du Fehlermeldungen noch sonstige sinnvolle Angaben.</p>
<p>Bitte in Zukunft genauere Angaben machen.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1708993</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1708993</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Mon, 11 May 2009 13:22:44 GMT</pubDate></item></channel></rss>