<?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[transform benötigt &#x27;standardkonstruktor&#x27;]]></title><description><![CDATA[<p>Hallo, ich habe noch mal eine Frage. Ich probiere gerade etwas mit den Funktionen der STL rum und verstehe das momentane Verhalten nicht.<br />
In dem Programm wird ein Vektor aus Bauteilen erzeugt, anschliessend wird der Vektor an die Funktion transform übergeben. Diese soll anhand der Funktion baue_auto(CBauteile) Autos 'produzieren' und sie in dem Vektor autos speichern.<br />
Jedes bauteil hat eine Nummer und diese wird auch für das jeweilige Auto übernommen.<br />
Allerdings klappt dies nur, wenn ich einen Standardkonstruktor (ohne Parameter) in die Klasse CAuto implementiere. Ansonsten kriege ich die Fehlermeldung:</p>
<pre><code>microsoft visual studio 10.0\vc\include\memory(631): error C2512: 'CAuto::CAuto': Kein geeigneter Standardkonstruktor verfügbar

microsoft visual studio 10.0\vc\include\memory(672): Siehe Verweis auf die Instanziierung der gerade kompilierten Funktions-template &quot;void std::_Uninit_def_fill_n&lt;_FwdIt,_Diff,_Tval,_Alloc,CAuto&gt;(_FwdIt,_Diff,const _Tval *,_Alloc &amp;,_Valty *,std::_Nonscalar_ptr_iterator_tag)&quot;.
</code></pre>
<p>Dies ist aber unlogisch, da ich den Standardkonstruktor eigentlich gar nicht benötige. Schliesslich muss ich jedem Auto die Nummer übergeben. Des weiteren wird der Standardkonstruktor offenbar auch gar nicht benutzt, da es kein Auto mit der Nr -1 gibt.</p>
<p>Hier ist der funktionierende Code:</p>
<pre><code class="language-cpp">#include &quot;CinTest.h&quot;

using namespace std;

class CBauteile
{
public:
	CBauteile(int iNr) {
		_iNr = iNr;
	}
	int iNr() {return _iNr;}
private:
	int _iNr;
};

class CAuto
{
public:
	CAuto() { //dieser Konstruktor wird zum Kompillieren benötigt!! (!!!!!)
		_iNr = -1;
		_iSprit = 0;
	}
	CAuto(int iNr) {
		_iNr = iNr;
		_iSprit = 0;
	}
	void tanken(int iNeuerSprit) {
		if (iNeuerSprit &gt; 100)
			iNeuerSprit = 100;
		cout &lt;&lt; &quot;Auto Nr. &quot; &lt;&lt; _iNr &lt;&lt; &quot; wird auf &quot; &lt;&lt; iNeuerSprit &lt;&lt; &quot; betankt!&quot; &lt;&lt; endl;
		_iSprit = iNeuerSprit;
	}
	int iNr() {return _iNr;}
private:
	int _iNr, _iSprit;
};

CAuto baue_autos(CBauteile teile) {
	cout &lt;&lt; &quot;Auto mit Nr. &quot; &lt;&lt; teile.iNr() &lt;&lt; &quot; wird gebaut!&quot; &lt;&lt; endl;
	return CAuto(teile.iNr());
}

int main(int argc, char *argv[]) {
	vector &lt;CBauteile&gt; bauteile;
	vector&lt;CAuto&gt; autos;
	for (int i=0;i&lt;10;i++) 
		bauteile.push_back(CBauteile(i * 10)); //allen bauteilen eine nr zuweisen

	autos.resize(bauteile.size());
	transform(bauteile.begin(), bauteile.end(), autos.begin(), baue_autos); //die autos werden mit den bauteilen gebaut, aber die Nr bleibt erhalten

	for (vector&lt;CAuto&gt;::iterator it=autos.begin();it!=autos.end();it++) {
		cout &lt;&lt; &quot;Auto hat Nr. &quot; &lt;&lt; it-&gt;iNr() &lt;&lt; endl;
	}
	cin.get();
	return 0;
}
</code></pre>
<p>Ausgabe: <a href="http://www.imagebanana.com/view/9apfdnld/konsole.png" rel="nofollow">http://www.imagebanana.com/view/9apfdnld/konsole.png</a></p>
<p>Sobald ich nun den Konstruktor in Zeile 19 lösche, kriege ich die vorhin genannten Fehlermeldungen.</p>
<pre><code class="language-cpp">CAuto() { //dieser Konstruktor wird zum Kompillieren benötigt!! (!!!!!)
		_iNr = -1;
		_iSprit = 0;
	}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/306402/transform-benötigt-standardkonstruktor</link><generator>RSS for Node</generator><lastBuildDate>Sat, 08 Aug 2026 07:36:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/306402.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 27 Jul 2012 11:27:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to transform benötigt &#x27;standardkonstruktor&#x27; on Fri, 27 Jul 2012 11:27:33 GMT]]></title><description><![CDATA[<p>Hallo, ich habe noch mal eine Frage. Ich probiere gerade etwas mit den Funktionen der STL rum und verstehe das momentane Verhalten nicht.<br />
In dem Programm wird ein Vektor aus Bauteilen erzeugt, anschliessend wird der Vektor an die Funktion transform übergeben. Diese soll anhand der Funktion baue_auto(CBauteile) Autos 'produzieren' und sie in dem Vektor autos speichern.<br />
Jedes bauteil hat eine Nummer und diese wird auch für das jeweilige Auto übernommen.<br />
Allerdings klappt dies nur, wenn ich einen Standardkonstruktor (ohne Parameter) in die Klasse CAuto implementiere. Ansonsten kriege ich die Fehlermeldung:</p>
<pre><code>microsoft visual studio 10.0\vc\include\memory(631): error C2512: 'CAuto::CAuto': Kein geeigneter Standardkonstruktor verfügbar

microsoft visual studio 10.0\vc\include\memory(672): Siehe Verweis auf die Instanziierung der gerade kompilierten Funktions-template &quot;void std::_Uninit_def_fill_n&lt;_FwdIt,_Diff,_Tval,_Alloc,CAuto&gt;(_FwdIt,_Diff,const _Tval *,_Alloc &amp;,_Valty *,std::_Nonscalar_ptr_iterator_tag)&quot;.
</code></pre>
<p>Dies ist aber unlogisch, da ich den Standardkonstruktor eigentlich gar nicht benötige. Schliesslich muss ich jedem Auto die Nummer übergeben. Des weiteren wird der Standardkonstruktor offenbar auch gar nicht benutzt, da es kein Auto mit der Nr -1 gibt.</p>
<p>Hier ist der funktionierende Code:</p>
<pre><code class="language-cpp">#include &quot;CinTest.h&quot;

using namespace std;

class CBauteile
{
public:
	CBauteile(int iNr) {
		_iNr = iNr;
	}
	int iNr() {return _iNr;}
private:
	int _iNr;
};

class CAuto
{
public:
	CAuto() { //dieser Konstruktor wird zum Kompillieren benötigt!! (!!!!!)
		_iNr = -1;
		_iSprit = 0;
	}
	CAuto(int iNr) {
		_iNr = iNr;
		_iSprit = 0;
	}
	void tanken(int iNeuerSprit) {
		if (iNeuerSprit &gt; 100)
			iNeuerSprit = 100;
		cout &lt;&lt; &quot;Auto Nr. &quot; &lt;&lt; _iNr &lt;&lt; &quot; wird auf &quot; &lt;&lt; iNeuerSprit &lt;&lt; &quot; betankt!&quot; &lt;&lt; endl;
		_iSprit = iNeuerSprit;
	}
	int iNr() {return _iNr;}
private:
	int _iNr, _iSprit;
};

CAuto baue_autos(CBauteile teile) {
	cout &lt;&lt; &quot;Auto mit Nr. &quot; &lt;&lt; teile.iNr() &lt;&lt; &quot; wird gebaut!&quot; &lt;&lt; endl;
	return CAuto(teile.iNr());
}

int main(int argc, char *argv[]) {
	vector &lt;CBauteile&gt; bauteile;
	vector&lt;CAuto&gt; autos;
	for (int i=0;i&lt;10;i++) 
		bauteile.push_back(CBauteile(i * 10)); //allen bauteilen eine nr zuweisen

	autos.resize(bauteile.size());
	transform(bauteile.begin(), bauteile.end(), autos.begin(), baue_autos); //die autos werden mit den bauteilen gebaut, aber die Nr bleibt erhalten

	for (vector&lt;CAuto&gt;::iterator it=autos.begin();it!=autos.end();it++) {
		cout &lt;&lt; &quot;Auto hat Nr. &quot; &lt;&lt; it-&gt;iNr() &lt;&lt; endl;
	}
	cin.get();
	return 0;
}
</code></pre>
<p>Ausgabe: <a href="http://www.imagebanana.com/view/9apfdnld/konsole.png" rel="nofollow">http://www.imagebanana.com/view/9apfdnld/konsole.png</a></p>
<p>Sobald ich nun den Konstruktor in Zeile 19 lösche, kriege ich die vorhin genannten Fehlermeldungen.</p>
<pre><code class="language-cpp">CAuto() { //dieser Konstruktor wird zum Kompillieren benötigt!! (!!!!!)
		_iNr = -1;
		_iSprit = 0;
	}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2236179</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2236179</guid><dc:creator><![CDATA[Telefonmann]]></dc:creator><pubDate>Fri, 27 Jul 2012 11:27:33 GMT</pubDate></item><item><title><![CDATA[Reply to transform benötigt &#x27;standardkonstruktor&#x27; on Fri, 27 Jul 2012 11:34:07 GMT]]></title><description><![CDATA[<p>Edit: quatsch weg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2236180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2236180</guid><dc:creator><![CDATA[Jockelx]]></dc:creator><pubDate>Fri, 27 Jul 2012 11:34:07 GMT</pubDate></item><item><title><![CDATA[Reply to transform benötigt &#x27;standardkonstruktor&#x27; on Fri, 27 Jul 2012 11:36:33 GMT]]></title><description><![CDATA[<p>Das resize() füllt Dir den vector mit Autos, die mit deren Standardkonstruktor konstruiert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2236182</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2236182</guid><dc:creator><![CDATA[resize()]]></dc:creator><pubDate>Fri, 27 Jul 2012 11:36:33 GMT</pubDate></item><item><title><![CDATA[Reply to transform benötigt &#x27;standardkonstruktor&#x27; on Fri, 27 Jul 2012 11:45:09 GMT]]></title><description><![CDATA[<p>Oh, da habe ich gar nicht drauf geachtet. Ich habe den Fehler vor allem im Zusammenhang mit transform wargenommen. Dankeschön <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2236183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2236183</guid><dc:creator><![CDATA[Telefonmann]]></dc:creator><pubDate>Fri, 27 Jul 2012 11:45:09 GMT</pubDate></item><item><title><![CDATA[Reply to transform benötigt &#x27;standardkonstruktor&#x27; on Fri, 27 Jul 2012 12:37:12 GMT]]></title><description><![CDATA[<p>statt resize vorher, sollte transform mit einem back_inserter arbeiten (und man kann, wenn man will, vorher ein reserve durchführen).<br />
oder du nimmst den transform_iterator aus boost und initialisierst den auto-vector direkt im Konstruktor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2236196</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2236196</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 27 Jul 2012 12:37:12 GMT</pubDate></item></channel></rss>