<?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[Funktion liefert komische int-Werte zurück]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich muss ein Template schreiben, welches jenachdem, ob es ein C-String oder ein C++-String bekommt, die Länge berechnet.</p>
<p>Ich hab folgende zwei Dateien:</p>
<pre><code class="language-cpp">// 1a.hpp
template &lt;typename T&gt; 
struct C{
	static int len(T str){
		int l = str.size();
		return l;
	}
};

template &lt; &gt; 
struct C &lt;const char*&gt;{
	static int len(const char* str){		
		int l = strlen(str);
		return l;
	}
};

template &lt;typename T&gt; 
int length(T str){
	C&lt;T&gt;::len(str);
};
</code></pre>
<p>und die Quelldatei:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;cstring&gt;
#include &quot;1a.hpp&quot;

using namespace std;

int main(){
	string s1 = &quot;Gandalf&quot;;	// STL
	char s2[] = &quot;Gandalf&quot;;	// C-Style

	int len1 = length&lt;string&gt;(s1);
	cout &lt;&lt; &quot;STL: &quot; &lt;&lt; len1 &lt;&lt; endl;

	int len2 = length&lt;const char*&gt;(s2);
	cout &lt;&lt; &quot;C-Style: &quot; &lt;&lt; len2 &lt;&lt; endl;

	return 0;
}
</code></pre>
<p>Ich bekomme aber immer folgende Ausgabe:</p>
<blockquote>
<p>STL: 4471568<br />
C-Style: 7</p>
</blockquote>
<p>Was hab ich denn falsch gemacht? Ich sehe meinen Fehler nicht...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/264537/funktion-liefert-komische-int-werte-zurück</link><generator>RSS for Node</generator><lastBuildDate>Fri, 04 Sep 2026 18:00:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/264537.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 08 Apr 2010 23:26:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Funktion liefert komische int-Werte zurück on Thu, 08 Apr 2010 23:26:16 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich muss ein Template schreiben, welches jenachdem, ob es ein C-String oder ein C++-String bekommt, die Länge berechnet.</p>
<p>Ich hab folgende zwei Dateien:</p>
<pre><code class="language-cpp">// 1a.hpp
template &lt;typename T&gt; 
struct C{
	static int len(T str){
		int l = str.size();
		return l;
	}
};

template &lt; &gt; 
struct C &lt;const char*&gt;{
	static int len(const char* str){		
		int l = strlen(str);
		return l;
	}
};

template &lt;typename T&gt; 
int length(T str){
	C&lt;T&gt;::len(str);
};
</code></pre>
<p>und die Quelldatei:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;cstring&gt;
#include &quot;1a.hpp&quot;

using namespace std;

int main(){
	string s1 = &quot;Gandalf&quot;;	// STL
	char s2[] = &quot;Gandalf&quot;;	// C-Style

	int len1 = length&lt;string&gt;(s1);
	cout &lt;&lt; &quot;STL: &quot; &lt;&lt; len1 &lt;&lt; endl;

	int len2 = length&lt;const char*&gt;(s2);
	cout &lt;&lt; &quot;C-Style: &quot; &lt;&lt; len2 &lt;&lt; endl;

	return 0;
}
</code></pre>
<p>Ich bekomme aber immer folgende Ausgabe:</p>
<blockquote>
<p>STL: 4471568<br />
C-Style: 7</p>
</blockquote>
<p>Was hab ich denn falsch gemacht? Ich sehe meinen Fehler nicht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1879751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1879751</guid><dc:creator><![CDATA[lil_pingu]]></dc:creator><pubDate>Thu, 08 Apr 2010 23:26:16 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion liefert komische int-Werte zurück on Thu, 08 Apr 2010 23:36:04 GMT]]></title><description><![CDATA[<p>Du hast uns üblen Käse geschickt.</p>
<p>Bei mir kommt 2x 7 als Ergebnis, vorausgesetzt ich schreibe da &quot;return&quot; hin, wo ein Compiler-Fehler kommt.</p>
<p>Bist du dir sicher, dass du uns da nicht etwas verschweigst in dem du den Code händisch hierher überschrieben hast?</p>
<p>BTW: Metaprogrammierung statt einer einfachen Überladung? Ist es in C++ schon soweit gekommen?</p>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1879753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1879753</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Thu, 08 Apr 2010 23:36:04 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion liefert komische int-Werte zurück on Thu, 08 Apr 2010 23:37:11 GMT]]></title><description><![CDATA[<p>lil_pingu schrieb:</p>
<blockquote>
<p>Hallo,<br />
ich muss ein Template schreiben, welches jenachdem, ob es ein C-String oder ein C++-String bekommt, die Länge berechnet.</p>
</blockquote>
<p>Der da <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-264347.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-264347.html</a> auch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1879754</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1879754</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 08 Apr 2010 23:37:11 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion liefert komische int-Werte zurück on Thu, 08 Apr 2010 23:43:05 GMT]]></title><description><![CDATA[<p>SideWinder schrieb:</p>
<blockquote>
<p>BTW: Metaprogrammierung statt einer einfachen Überladung? Ist es in C++ schon soweit gekommen?</p>
</blockquote>
<p>Nein.</p>
<blockquote>
<p>a) Schreiben Sie Funktionen length(str) und charAt(str, i), mit denen man die<br />
Länge bzw. das i-te Zeichen eines Strings str ermitteln kann, und zwar sowohl<br />
für Strings der Standard-Bibliothek (basic_string) als auch für 0-terminierte char arrays (&quot;c-style Strings&quot;).</p>
<p>b) Schreiben Sie ein einzelnes Funktions-Template printRev(str), das unter<br />
Verwendung von length(str) und charAt(str, i) einen String str rückwärts<br />
ausgibt.</p>
</blockquote>
<p>Wenn icjh richtig lese, soll die a) ganz schlicht mit Überladung gemacht werden und die b) gibt eine Template-Funktion.<br />
Keine Klassen und so. Ich nehme an, der Prof hat gegen Ende der Vorlesung so ein kompliziertes Beispiel gezeigt, daß die Studenten jetzt total verwirrt sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1879755</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1879755</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Thu, 08 Apr 2010 23:43:05 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion liefert komische int-Werte zurück on Thu, 08 Apr 2010 23:46:37 GMT]]></title><description><![CDATA[<p>SideWinder schrieb:</p>
<blockquote>
<p>Du hast uns üblen Käse geschickt.</p>
<p>Bei mir kommt 2x 7 als Ergebnis, vorausgesetzt ich schreibe da &quot;return&quot; hin, wo ein Compiler-Fehler kommt.</p>
<p>Bist du dir sicher, dass du uns da nicht etwas verschweigst in dem du den Code händisch hierher überschrieben hast?</p>
<p>MfG SideWinder</p>
</blockquote>
<p>Was soll ich denn bitte verschweigen? Ich hab den Code so gepostet, wie er in meinem Editor steht.</p>
<p>Aber falls du abschreiben oder sonstwas meinst: Ich bin zufällig mit dem Poster in einem Kurs, der die gleiche Aufgabe hier im Forum gelöst hat. Da ich nicht genau weiß, auf was du dich mit verschweigen und händisch usw meinst, kannst du dir eine Antwort aussuchen.</p>
<p>Was ist also genau mein Fehler? Ich bekomme nicht 2x7 raus. Und ich krieg auch keine Fehlermeldungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1879758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1879758</guid><dc:creator><![CDATA[lil_pingu]]></dc:creator><pubDate>Thu, 08 Apr 2010 23:46:37 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion liefert komische int-Werte zurück on Fri, 09 Apr 2010 00:04:24 GMT]]></title><description><![CDATA[<p>Händisch:<br />
Per Hand, nicht mit Copy&amp;Paste.</p>
<p>Verschweigen:<br />
Hier ist versehentliches Weglassen des return gemeint.</p>
<p>Der Programmierfehler:</p>
<pre><code class="language-cpp">template &lt;typename T&gt; 
int length(T str){
    return C&lt;T&gt;::len(str);//dieses return fehlte
};
</code></pre>
<p>Und noch zwei Vermutungen von mir.</p>
<p>Deine Entwicklungsumgebung:<br />
Microsoft Vistal C++ Express Edition</p>
<p>Der Klickfehler:<br />
Als ein Fehler war fragte die IDE beim Ausführungsversuch, ob stattdessen die alte Version gestartet werden soll und Du hast &quot;Ja&quot; gesagt und noch dazu &quot;merk Dir die Antwort&quot; und jetzt haben wie den Salat: Man sieht keine Fehler mehr, wenn man mit F5 oder Strg+F5 oder &quot;Ausführen&quot; oder dem Rechtspfeilsmarticon compiliert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1879763</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1879763</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 09 Apr 2010 00:04:24 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion liefert komische int-Werte zurück on Fri, 09 Apr 2010 00:18:41 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Händisch:<br />
Per Hand, nicht mit Copy&amp;Paste.</p>
<p>Verschweigen:<br />
Hier ist versehentliches Weglassen des return gemeint.</p>
<p>Der Programmierfehler:</p>
<pre><code class="language-cpp">template &lt;typename T&gt; 
int length(T str){
    return C&lt;T&gt;::len(str);//dieses return fehlte
};
</code></pre>
<p>Und noch zwei Vermutungen von mir.</p>
<p>Deine Entwicklungsumgebung:<br />
Microsoft Vistal C++ Express Edition</p>
<p>Der Klickfehler:<br />
Als ein Fehler war fragte die IDE beim Ausführungsversuch, ob stattdessen die alte Version gestartet werden soll und Du hast &quot;Ja&quot; gesagt und noch dazu &quot;merk Dir die Antwort&quot; und jetzt haben wie den Salat: Man sieht keine Fehler mehr, wenn man mit F5 oder Strg+F5 oder &quot;Ausführen&quot; oder dem Rechtspfeilsmarticon compiliert.</p>
</blockquote>
<p>Danke für die Korrektur!</p>
<p>PS: Ich arbeite nicht mit MVS. Ich arbeite mit dem GCC, teilweise unter Linux Mint, aber gerade per MinGW auf Windows. Das return hab ich schlichtweg vergessen :p Danke für den Hinweis!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1879771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1879771</guid><dc:creator><![CDATA[lil_pingu]]></dc:creator><pubDate>Fri, 09 Apr 2010 00:18:41 GMT</pubDate></item><item><title><![CDATA[Reply to Funktion liefert komische int-Werte zurück on Fri, 09 Apr 2010 00:29:57 GMT]]></title><description><![CDATA[<p>lil_pingu schrieb:</p>
<blockquote>
<p>PS: Ich arbeite nicht mit MVS. Ich arbeite mit dem GCC, teilweise unter Linux Mint, aber gerade per MinGW auf Windows. Das return hab ich schlichtweg vergessen :p Danke für den Hinweis!</p>
</blockquote>
<p>Da ist das vergessene return nur eine Warnung und wenn man mit F9 startet und compiliert, sieht man die Warnung nicht.<br />
Mit Strg+F9, nachdem man den Code geändert hat (Leerzeichen rein- und wieder rausmachen) sieht man die Warnungen nochmal.<br />
Supi ist auch -Wall als Compileroption einzustellen, dann kann einem keine Warnung mehr durch die Lappen gehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1879776</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1879776</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 09 Apr 2010 00:29:57 GMT</pubDate></item></channel></rss>