<?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[STL Vector, operator=(..) überladen, kein const Argument]]></title><description><![CDATA[<p>Hi,<br />
hoffentlich könnt ihr mir weiter helfen <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="🙂"
    /><br />
Folgendes Problem:<br />
Ich erstelle zunächst einen Vector:</p>
<p>std::vector&lt;Campaign&gt;* list = new std::vector&lt;Campaign&gt;;</p>
<p>Nun möchte ich Folgendes aufrufen:</p>
<p>list-&gt;operator=(result-&gt;return_);</p>
<p>wobei result-&gt;return_ den von gSOAP erstellten Typ std::vector&lt;xsd__anyType * &gt; hat. (Ist aber für mein Problem vermutlich nicht wichtig,siehe Compiler-Fehlermeldung)</p>
<p>Der Compiler gibt mir folgende Fehlermeldung aus:</p>
<p>helloworld.cpp(167) : error C2664: 'std::vector&lt;_Ty&gt;::operator =': Konvertierung des Parameters 1 von 'std::vector&lt;_Ty&gt;' in 'const std::vector&lt;_Ty&gt; &amp;' nicht möglich<br />
with<br />
[<br />
_Ty=Campaign<br />
]<br />
and<br />
[<br />
_Ty=xsd__anyType *<br />
]<br />
and<br />
[<br />
_Ty=Campaign<br />
]<br />
Ursache: Konvertierung von 'std::vector&lt;_Ty&gt;' in 'const std::vector&lt;_Ty&gt;' nicht möglich<br />
with<br />
[<br />
_Ty=xsd__anyType *<br />
]<br />
and<br />
[<br />
_Ty=Campaign<br />
]<br />
Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werden</p>
<p>anscheinend liegt es daran das result-&gt;return_ nicht const ist, aber die Funktion operator=(...) ein const Argument erwartet.<br />
Wo ( in der Klasse campaign?, in der hellworld.cpp?) und wie müsste ich den Operator=(..) überschreiben sodass kopieren auch ohne const Argument möglich ist?</p>
<p>Danke schon mal für jegliche Hilfe/Idee,<br />
Grüße,<br />
Christoph</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/244850/stl-vector-operator-überladen-kein-const-argument</link><generator>RSS for Node</generator><lastBuildDate>Fri, 18 Sep 2026 23:40:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/244850.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 06 Jul 2009 17:23:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to STL Vector, operator=(..) überladen, kein const Argument on Mon, 06 Jul 2009 17:23:58 GMT]]></title><description><![CDATA[<p>Hi,<br />
hoffentlich könnt ihr mir weiter helfen <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="🙂"
    /><br />
Folgendes Problem:<br />
Ich erstelle zunächst einen Vector:</p>
<p>std::vector&lt;Campaign&gt;* list = new std::vector&lt;Campaign&gt;;</p>
<p>Nun möchte ich Folgendes aufrufen:</p>
<p>list-&gt;operator=(result-&gt;return_);</p>
<p>wobei result-&gt;return_ den von gSOAP erstellten Typ std::vector&lt;xsd__anyType * &gt; hat. (Ist aber für mein Problem vermutlich nicht wichtig,siehe Compiler-Fehlermeldung)</p>
<p>Der Compiler gibt mir folgende Fehlermeldung aus:</p>
<p>helloworld.cpp(167) : error C2664: 'std::vector&lt;_Ty&gt;::operator =': Konvertierung des Parameters 1 von 'std::vector&lt;_Ty&gt;' in 'const std::vector&lt;_Ty&gt; &amp;' nicht möglich<br />
with<br />
[<br />
_Ty=Campaign<br />
]<br />
and<br />
[<br />
_Ty=xsd__anyType *<br />
]<br />
and<br />
[<br />
_Ty=Campaign<br />
]<br />
Ursache: Konvertierung von 'std::vector&lt;_Ty&gt;' in 'const std::vector&lt;_Ty&gt;' nicht möglich<br />
with<br />
[<br />
_Ty=xsd__anyType *<br />
]<br />
and<br />
[<br />
_Ty=Campaign<br />
]<br />
Kein benutzerdefinierter Konvertierungsoperator verfügbar, der diese Konvertierung durchführen kann, oder der Operator kann nicht aufgerufen werden</p>
<p>anscheinend liegt es daran das result-&gt;return_ nicht const ist, aber die Funktion operator=(...) ein const Argument erwartet.<br />
Wo ( in der Klasse campaign?, in der hellworld.cpp?) und wie müsste ich den Operator=(..) überschreiben sodass kopieren auch ohne const Argument möglich ist?</p>
<p>Danke schon mal für jegliche Hilfe/Idee,<br />
Grüße,<br />
Christoph</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1738095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1738095</guid><dc:creator><![CDATA[kid]]></dc:creator><pubDate>Mon, 06 Jul 2009 17:23:58 GMT</pubDate></item><item><title><![CDATA[Reply to STL Vector, operator=(..) überladen, kein const Argument on Mon, 06 Jul 2009 17:44:46 GMT]]></title><description><![CDATA[<p>1. Das Problem liegt daran, dass du einem <code>std::vector</code> mit Campaign Objekten einen <code>std::vector</code> voller <code>xsd__anyType*</code> Objekte zuweisen willst. Ganz ehrlich, wie soll das gehen?<br />
2. Wieso erstellst du den <code>std::vector&lt;Campaign&gt;</code> per <code>new</code> ?</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1738106</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1738106</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 06 Jul 2009 17:44:46 GMT</pubDate></item><item><title><![CDATA[Reply to STL Vector, operator=(..) überladen, kein const Argument on Mon, 06 Jul 2009 17:53:35 GMT]]></title><description><![CDATA[<p>Was ist überhaupt das hier für ein Käse: list-&gt;operator=(result-&gt;return_);</p>
<pre><code class="language-cpp">std::vector&lt; xsd__anyType* &gt; vec = result-&gt;return_; // ist return_ etwa ein private member? Wenn ja, dann vergiss es das das überhaupt funktioniert
</code></pre>
<p>Mit const hat das in Deinem Fall überhaupt nichts zu tun. Wenn eine Funktion/Methode einen const Parameter definiert heist das nur das innerhalb dieser Funktion/Methode: das Object/die Referenz auf das Objekt/ein Zeiger auf das Objekt nicht verändert werden kann oder brauch.</p>
<p>Gut Schuß<br />
VuuRWerK <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/1738112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1738112</guid><dc:creator><![CDATA[VuuRWerK]]></dc:creator><pubDate>Mon, 06 Jul 2009 17:53:35 GMT</pubDate></item><item><title><![CDATA[Reply to STL Vector, operator=(..) überladen, kein const Argument on Mon, 06 Jul 2009 20:11:25 GMT]]></title><description><![CDATA[<p>result-&gt;return_ ist der Rückgabewert einer Funktion eines Webservice (in Java gecodet). Diese Funktion gibt eine java.util.list zurück, also eine ganz normale Liste von Objekten &quot;campaign&quot;. Die Liste möchte in einem c++ Projekt weiter verwenden, deshalb möchte ich die Liste in einen stl vector kopieren.<br />
Der Typ xsd__anyType* wurde von gSOAP automatisch erstellt, praktisch als Platzhalter für den jeweiligen Objekttyp.<br />
Aber anscheinend ist das Problem wohl doch kein reines c++ Problem.<br />
Aber vielleicht kennt sich ja trotzdem jemand zufällig mit gSOAP aus und weiß Rat <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/1738201</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1738201</guid><dc:creator><![CDATA[kid]]></dc:creator><pubDate>Mon, 06 Jul 2009 20:11:25 GMT</pubDate></item><item><title><![CDATA[Reply to STL Vector, operator=(..) überladen, kein const Argument on Tue, 07 Jul 2009 10:45:27 GMT]]></title><description><![CDATA[<p>Die Funktion gibt <em>innerhalb</em> deines Webservices eine java.util.list zurück. Das SOAP Framework in java macht daraus einen XML-String und schickt den übers Netz an deine Applikation. gSOAP wandelt diesen XML-String wiederum in Daten. Wie diese Daten dann aussehen entnimmst du am Besten der gSOAP-Doku. Ein std::vector kommt da jedenfalls nicht ohne weiteres bei raus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1738452</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1738452</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 07 Jul 2009 10:45:27 GMT</pubDate></item><item><title><![CDATA[Reply to STL Vector, operator=(..) überladen, kein const Argument on Tue, 07 Jul 2009 11:48:56 GMT]]></title><description><![CDATA[<p>Du hast doch selbst gesagt, der Vector ist vom Typ vector&lt;xsd__anyType*&gt; (das macht gSOAP aus dieser XML-Liste, die wie pumuckl richtig gesagt hat nichts mehr mit der Java-Liste zu tun hat). Diesen möchtest Du in einen vector&lt;Campaign&gt; umwandeln. Dazu musst Du jedes einzelne Element von xsd__anyType* in Campaign umwandeln. Woher soll der Compiler wissen, wie das geht?</p>
<p>Soweit ich gSOAP kenne, ist &quot;Campaign&quot; nichtmal eine der generierten Klassen, so dass gSOAP kein Bewusstsein über &quot;Campaign&quot; hat, oder?</p>
<p>Denkbar wäre z.B:</p>
<pre><code class="language-cpp">Campaign anyToCampaign( xsd__anyType const* wert )
{
    /* unwandeln */
}

std::vector&lt; Campaign &gt; list( result-&gt;return_.size() );
std::transform( result-&gt;return_.begin(), result-&gt;return_.end(), list.begin(), anyToCampaign );
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1738503</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1738503</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 07 Jul 2009 11:48:56 GMT</pubDate></item><item><title><![CDATA[Reply to STL Vector, operator=(..) überladen, kein const Argument on Tue, 07 Jul 2009 15:16:48 GMT]]></title><description><![CDATA[<p>Hi,<br />
mein obiger Post war etwas blöd formuliert. Der von gSOAP erstellte Typ ist ns1__campaign, wir benutzen aber in dem c++ Programm eine Klasse Campaign welche als Attribut einen Zeiger auf ein ns1__campaign enthält, deshalb stand oben std::vector&lt;Campaign&gt; und nicht std::vector&lt;ns1__campaign&gt;.<br />
Lieber arbeite ich nur mit ns1__campaign und dafür funktioniert das ganze.<br />
Ich habe nun den Code von LordJaxom übernommen, aber wenn ich ehrlich bin weiß ich nicht wirklich wie ich Funktion anytoCampaign coden soll.<br />
Momentan sieht es so aus (mit ns1__campaign anstatt Campaign):</p>
<p>ns1__campaign anyToCampaign( xsd__anyType const* wert )<br />
{<br />
/* unwandeln */</p>
<p>}</p>
<p>std::vector&lt;ns1__campaign&gt; list( result-&gt;return_.size() );<br />
std::transform( result-&gt;return_.begin(), result-&gt;return_.end(), list.begin(), anyToCampaign );</p>
<p>Ich hoffe folgender von gSOAP erstellter Code ist hilfreich:</p>
<pre><code>ifndef SOAP_TYPE_ns1__campaign
#define SOAP_TYPE_ns1__campaign (21)
/* ns1:campaign */
class SOAP_CMAC ns1__campaign : public xsd__anyType
{
public:
	int *bonus;	/* optional element of type xsd:int */
	std::string *description;	/* optional element of type xsd:string */
	std::string *happyEnd;	/* optional element of type xsd:string */
	int *id;	/* optional element of type xsd:int */
	bool isSorted;	/* required element of type xsd:boolean */
	int modus;	/* required element of type xsd:int */
	std::string *name;	/* optional element of type xsd:string */
	int rateCount;	/* required element of type xsd:int */
	int rateSum;	/* required element of type xsd:int */
	int *type;	/* optional element of type xsd:int */
public:
	virtual int soap_type() const { return 21; } /* = unique id SOAP_TYPE_ns1__campaign */
	virtual void soap_default(struct soap*);
	virtual void soap_serialize(struct soap*) const;
	virtual int soap_put(struct soap*, const char*, const char*) const;
	virtual int soap_out(struct soap*, const char*, int, const char*) const;
	virtual void *soap_get(struct soap*, const char*, const char*);
	virtual void *soap_in(struct soap*, const char*, const char*);
	         ns1__campaign() : bonus(NULL), description(NULL), happyEnd(NULL), id(NULL), isSorted((bool)0), modus(0), name(NULL), rateCount(0), rateSum(0), type(NULL) { }
	virtual ~ns1__campaign() { }
};
#endif
</code></pre>
<pre><code>class SOAP_CMAC ns1__loadCampaignsResponse : public xsd__anyType
{
public:
	std::vector&lt;xsd__anyType * &gt;return_;	/* SOAP 1.2 RPC return element (when namespace qualified) */	/* optional element of type xsd:anyType */
public:
	virtual int soap_type() const { return 25; } /* = unique id SOAP_TYPE_ns1__loadCampaignsResponse */
	virtual void soap_default(struct soap*);
	virtual void soap_serialize(struct soap*) const;
	virtual int soap_put(struct soap*, const char*, const char*) const;
	virtual int soap_out(struct soap*, const char*, int, const char*) const;
	virtual void *soap_get(struct soap*, const char*, const char*);
	virtual void *soap_in(struct soap*, const char*, const char*);
	         ns1__loadCampaignsResponse()  { }
	virtual ~ns1__loadCampaignsResponse() { }
};
#endif
</code></pre>
<p>Danke für die Hilfe bisher,<br />
Christoph</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1738680</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1738680</guid><dc:creator><![CDATA[kid]]></dc:creator><pubDate>Tue, 07 Jul 2009 15:16:48 GMT</pubDate></item><item><title><![CDATA[Reply to STL Vector, operator=(..) überladen, kein const Argument on Tue, 07 Jul 2009 17:15:59 GMT]]></title><description><![CDATA[<p>In diesem Fall gehe ich davon aus, dass die Objekte in dem anyType-Vector alle vom (dynamischen) Typ ns1__Campaign sind (sofern im XML dort wirklich keine Elemente anderen Typs stehen), da xsd_anyType polymorph ist und ns1__Campain von xsd_anyType erbt. Damit kannst Du eine(n) Zeiger/Referenz auf ein xsd__anyType-Element dynamisch auf eine(n) Zeiger/Referenz auf ein ns1__Campaign casten (mit dynamic_cast). Wenn Du Zeiger so castest gibt es 0 zurück, wenn ein Element nicht vom geforderten Typ ist, bei Referenzen fliegt eine Exception.</p>
<p>Die Umwandlungsfunktion müsste natürlich dann einen Zeiger zurückgeben, der Vorteil wäre zunächst mal dass keine Daten kopiert werden müssten. Aber nach dem gleichen Prinzip kannst Du dann auch Dein Campaign-Objekt erstellen.</p>
<pre><code class="language-cpp">ns1__campaign* anyToCampaign( xsd__anyType* wert ) /* anmerkung: dieses mal müssen entweder beide Objekte const sein oder keins von beiden */
{ 
   return &amp;dynamic_cast&lt;ns1__campaign&amp;&gt;(*wert);
   // wegen des oben beschriebenen Verhaltens des Referenzcasts sieht dieser etwas kryptisch aus, da ich eine exception möchte, falls ein wert kein ns1__campaign ist.
}

std::vector&lt;ns1__campaign*&gt; list( result-&gt;return_.size() ); 
try {
   std::transform( result-&gt;return_.begin(), result-&gt;return_.end(), list.begin(), anyToCampaign );
} catch (std::bad_cast const&amp;) {
   std::cout &lt;&lt; &quot;unerwartete xml-elemente!&quot;;
}
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">Campaign anyToCampaign( xsd__anyType* wert ) 
{ 
   return Campaign( &amp;dynamic_cast&lt;ns1__campaign&amp;&gt;(*wert) );
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1738683</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1738683</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 07 Jul 2009 17:15:59 GMT</pubDate></item><item><title><![CDATA[Reply to STL Vector, operator=(..) überladen, kein const Argument on Wed, 08 Jul 2009 20:01:32 GMT]]></title><description><![CDATA[<p>Hi,<br />
vielen Dank, es hat nun geklappt <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/1739411</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1739411</guid><dc:creator><![CDATA[kid]]></dc:creator><pubDate>Wed, 08 Jul 2009 20:01:32 GMT</pubDate></item></channel></rss>