<?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[Problem mit Konstruktor]]></title><description><![CDATA[<p>Hallo Helfer,</p>
<p>mein Problem ist das ich mit einer Parameter übergabe eine fehlermeldung kriege wenn ich Parameter aus einem Feld übergeben möchte.</p>
<p>Mein Programm sieht bisher so aus:</p>
<p>#include&lt;iostream&gt;<br />
#include&lt;stdio.h&gt;<br />
#include&lt;stdlib.h&gt;<br />
#include&lt;math.h&gt;<br />
using namespace std;</p>
<p>class ebay {<br />
private:<br />
char artikel[30];<br />
double istpreis;<br />
int bezahlt;<br />
char mail[30];<br />
public:<br />
int i;<br />
ebay(char p=0,double y=0, int x=0, char c=0);<br />
void ausgabe();</p>
<p>};</p>
<p>ebay::ebay(char p, double y, int x, char c){<br />
for(i=0;i&lt;30;i++){<br />
artikel[i]=p;<br />
mail[i]=c;<br />
}<br />
istpreis=y;<br />
bezahlt=x;<br />
}</p>
<p>//void ebay::bezahltstatus(){</p>
<p>// }</p>
<p>void ebay::ausgabe(){<br />
for(i=0;i&lt;30;i++){</p>
<p>if (artikel[i]&lt;=-1)<br />
continue;<br />
cout &lt;&lt; &quot;\n'artikel[&quot; &lt;&lt; i &lt;&lt; &quot;] = &quot; &lt;&lt; artikel[i];<br />
//cout &lt;&lt; &quot;\n'mail[&quot; &lt;&lt; i &lt;&lt; &quot;] = &quot; &lt;&lt; mail[i];<br />
}<br />
cout &lt;&lt; &quot;\n'Istpeis': &quot; &lt;&lt; istpreis;<br />
cout &lt;&lt; &quot;\n'bezahlt': &quot; &lt;&lt; bezahlt;<br />
}</p>
<p>int main(){<br />
ebay verkauft[100] =<br />
{<br />
ebay( &quot;Handy&quot;, 15.90, 1, <a href="mailto:%22depp@gmx.de" rel="nofollow">&quot;depp@gmx.de</a>&quot;) , &lt;-----ZEILE 57<br />
ebay( &quot;Staubsauger&quot;, 35.15, 0, <a href="mailto:%22Hoppenstedt@web.de" rel="nofollow">&quot;Hoppenstedt@web.de</a>&quot;) ,<br />
ebay( &quot;Socken&quot;, 3.50, 0, <a href="mailto:%22Manitu@fh-muenster.de" rel="nofollow">&quot;Manitu@fh-muenster.de</a>&quot;)<br />
};</p>
<p>cout &lt;&lt; endl &lt;&lt; endl;<br />
system(&quot;pause&quot;);<br />
return 0;<br />
}</p>
<p>ich kriege diese fehlermeldung:</p>
<p>57 invalid conversion from `const char*' to `char'<br />
57 initializing argument 1 of `ebay::ebay(char, double, int, char)'</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/243640/problem-mit-konstruktor</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 22:19:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/243640.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 19 Jun 2009 09:11:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Konstruktor on Fri, 19 Jun 2009 09:11:35 GMT]]></title><description><![CDATA[<p>Hallo Helfer,</p>
<p>mein Problem ist das ich mit einer Parameter übergabe eine fehlermeldung kriege wenn ich Parameter aus einem Feld übergeben möchte.</p>
<p>Mein Programm sieht bisher so aus:</p>
<p>#include&lt;iostream&gt;<br />
#include&lt;stdio.h&gt;<br />
#include&lt;stdlib.h&gt;<br />
#include&lt;math.h&gt;<br />
using namespace std;</p>
<p>class ebay {<br />
private:<br />
char artikel[30];<br />
double istpreis;<br />
int bezahlt;<br />
char mail[30];<br />
public:<br />
int i;<br />
ebay(char p=0,double y=0, int x=0, char c=0);<br />
void ausgabe();</p>
<p>};</p>
<p>ebay::ebay(char p, double y, int x, char c){<br />
for(i=0;i&lt;30;i++){<br />
artikel[i]=p;<br />
mail[i]=c;<br />
}<br />
istpreis=y;<br />
bezahlt=x;<br />
}</p>
<p>//void ebay::bezahltstatus(){</p>
<p>// }</p>
<p>void ebay::ausgabe(){<br />
for(i=0;i&lt;30;i++){</p>
<p>if (artikel[i]&lt;=-1)<br />
continue;<br />
cout &lt;&lt; &quot;\n'artikel[&quot; &lt;&lt; i &lt;&lt; &quot;] = &quot; &lt;&lt; artikel[i];<br />
//cout &lt;&lt; &quot;\n'mail[&quot; &lt;&lt; i &lt;&lt; &quot;] = &quot; &lt;&lt; mail[i];<br />
}<br />
cout &lt;&lt; &quot;\n'Istpeis': &quot; &lt;&lt; istpreis;<br />
cout &lt;&lt; &quot;\n'bezahlt': &quot; &lt;&lt; bezahlt;<br />
}</p>
<p>int main(){<br />
ebay verkauft[100] =<br />
{<br />
ebay( &quot;Handy&quot;, 15.90, 1, <a href="mailto:%22depp@gmx.de" rel="nofollow">&quot;depp@gmx.de</a>&quot;) , &lt;-----ZEILE 57<br />
ebay( &quot;Staubsauger&quot;, 35.15, 0, <a href="mailto:%22Hoppenstedt@web.de" rel="nofollow">&quot;Hoppenstedt@web.de</a>&quot;) ,<br />
ebay( &quot;Socken&quot;, 3.50, 0, <a href="mailto:%22Manitu@fh-muenster.de" rel="nofollow">&quot;Manitu@fh-muenster.de</a>&quot;)<br />
};</p>
<p>cout &lt;&lt; endl &lt;&lt; endl;<br />
system(&quot;pause&quot;);<br />
return 0;<br />
}</p>
<p>ich kriege diese fehlermeldung:</p>
<p>57 invalid conversion from `const char*' to `char'<br />
57 initializing argument 1 of `ebay::ebay(char, double, int, char)'</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729288</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729288</guid><dc:creator><![CDATA[Christophw]]></dc:creator><pubDate>Fri, 19 Jun 2009 09:11:35 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Konstruktor on Fri, 19 Jun 2009 09:21:53 GMT]]></title><description><![CDATA[<p>Der kompiler sagt dir genau wo das Problem ist. Auch solltest du dir bewusst werden, worin der Unterschied zwischen char und char* besteht. Fuer Zeichenketten wuerde ich dir ja std::string empfehlen, aber es gibt da wohl noch ein paar Verstaendnishuerden allgemein ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729294</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729294</guid><dc:creator><![CDATA[knivil]]></dc:creator><pubDate>Fri, 19 Jun 2009 09:21:53 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Konstruktor on Fri, 19 Jun 2009 11:25:55 GMT]]></title><description><![CDATA[<p>[quote=&quot;Christophw&quot;]</p>
<pre><code class="language-cpp">private:
char artikel[30];
char mail[30];

public:
int i;
ebay(char p=0,double y=0, int x=0, char c=0);

int main(){    

    ebay( &quot;Handy&quot;, 15.90, 1, &quot;depp@gmx.de&quot;) ,               

}
</code></pre>
<p>Wie mein Vorredner schon sagte, obwohl der Compiler nur 2 Zeilen raushaut, liefert er das genaue Problem. Die compilerseitige Klarheit bedeutet allerdings nicht zwangsläufig Klarheit beim Programmierer. Selbst bei den &quot;Profis&quot; kommts manchmal vor, dass der Compiler die eigene Freundin sein könnte.</p>
<p>Habe deinen Code ein wenig zerpflückt:</p>
<p>In main rufst du mit ...<br />
ebay( &quot;Handy&quot;, 15.90, 1, <a href="mailto:%22depp@gmx.de" rel="nofollow">&quot;depp@gmx.de</a>&quot;)</p>
<p>den Konstruktor auf ...<br />
ebay(char p=0,double y=0, int x=0, char c=0);</p>
<p>Problem ist, die übergebenen Argumente &quot;Handy&quot; und <a href="mailto:%22depp@gmx.de" rel="nofollow">&quot;depp@gmx.de</a>&quot; sind Literale, genauer gesagt String-Literale oder konstante Zeichenketten vom Typ const char[6] und const char[12].<br />
Jedes Zeichen einer solchen Zeichenkette wird garantiert direkt nebeneinander im Speicher abgelegt, wobei für jedes einzelne Zeichen ein Byte(<strong>char</strong>) beansprucht wird:<br />
'H', 'a', 'n', 'd', 'y'</p>
<p>Hinzu kommt noch 1 Byte, um das Ende einer Zeichenkette zu markieren:<br />
'\0'. Übergibst du ein String-Literal, brauchst dir darum allerdings keinen Kopf zu machen, dieses Zeichen wird dann automatisch angelegt.</p>
<p>Bei der Übergabe als Argument solcher Typen wird ein Zeiger auf das erste Element der Zeichenkette an den entsprechenden Parameter übergeben.</p>
<p>Nun sollen bei deinem Konstruktor die Parameter <strong>char</strong> p und <strong>char</strong> c anhand der übergebenen Argumente mit Zeigern auf const char[6] und const char[12] initialisiert werden. Autsch!<br />
Eine Variable vom Typ char ist nicht dazu in der Lage, Zeiger aufzunehmen, sondern nur einen Wert(char wird meist dazu verwendet, um mit Zeichen zu hantieren), z.b.:<br />
char p = 'a';</p>
<p>Ein Variable vom Typ char kann Informationen der Grösse 1 Byte &quot;tragen&quot;, wohingegen ein Zeiger definitiv mehr Platz beansprucht, was wiederum abhängig vom System ist. Auf meiner 32 Bit Kiste benötigt ein Zeiger 4 Byte(32 Bit).</p>
<p>Damit die Parameter deines Konstruktors korrekt arbeiten, müssen diese angepasst werden. Einen Zeiger fängt man am besten mit einem Zeiger:</p>
<pre><code class="language-cpp">ebay(char* p,double y, int x, char* c);
</code></pre>
<p>Da ein String-Literal(&quot;Handy&quot;) konstant und unveränderbar ist, ist es noch besser und sicherer, die Parameter ebenfalls konstant zu erklären:</p>
<pre><code class="language-cpp">ebay(const char* p,double y, int x, const char* c);
</code></pre>
<p>Bei der Definition deines Konstruktors kannst du dann auf ein paar ältere Geschichten aus C zurückgreifen und dir die Schleife sparen:</p>
<p>[cpp]<br />
ebay::ebay( const char* p, double y, int x, const char* c )<br />
{<br />
strcpy( artikel, p ); // sicherer ist strncpy, um nicht hinter Element 30 zu // schreiben<br />
strcpy( mail, c );<br />
}</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729370</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729370</guid><dc:creator><![CDATA[Chris31]]></dc:creator><pubDate>Fri, 19 Jun 2009 11:25:55 GMT</pubDate></item></channel></rss>