<?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[Kleines großes Problem mit Templateargumenten]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe da ein Problem mit Templateargumenten.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;

template &lt;std::string value_one, typename value_two&gt; class value_pair
{
public:
    value_pair ()
    {
        std::cout &lt;&lt; value_one &lt;&lt; &quot; = &quot; &lt;&lt; value_two &lt;&lt; std::endl;
    }
};

int main ()
{
    value_pair&lt;&quot;wert eins&quot;, 555&gt; mein_test;

    return 0;
}
</code></pre>
<p>Ich bekomme bei diesem Code mehrere Fehlermeldungen:</p>
<blockquote>
<p>1&gt;------ Build started: Project: templatetest, Configuration: Debug Win32 ------<br />
1&gt;Compiling...<br />
1&gt;main.cpp<br />
1&gt;main.cpp(4) : error C2993: 'std::string' : illegal type for non-type template parameter 'value_one'<br />
1&gt;main.cpp(15) : error C2762: 'value_pair' : invalid expression as a template argument for 'value_one'<br />
1&gt; main.cpp(5) : see declaration of 'value_pair'<br />
1&gt;main.cpp(15) : error C2133: 'mein_test' : unknown size<br />
1&gt;main.cpp(15) : error C2512: 'value_pair' : no appropriate default constructor available<br />
1&gt;Build log was saved at &quot;file://Debug\BuildLog.htm&quot;<br />
1&gt;templatetest - 4 error(s), 0 warning(s)<br />
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========</p>
</blockquote>
<p>Ich bekomme gesagt, das ich std::string nicht als Typ nehmen kann für parameter 1 und das die Instanz eine unbekannte größe sein würde.</p>
<p>Das mit std::string versteh ich, dadurch das es eine dynamische Klasse ist also den Speicher zur Laufzeit im RAM reserviert, ersetze ich std::string durch char[128] bekomme ich die erste Warnung nicht, doch kompilieren tut er immer noch nicht, wegen eines ungültigen Ausdrucks <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Wie kann ich den Code zum laufen bringen? Bitte keine Verweise auf andere Klassen, ich möchte diese Klasse zu laufen bringen <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="🙂"
    /> Bringt mir ja nichts andere klassen zu benutzen, wenn ich das Prinzip nicht verstehen. <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/topic/192534/kleines-großes-problem-mit-templateargumenten</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 12:36:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/192534.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 15 Sep 2007 17:18:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kleines großes Problem mit Templateargumenten on Sat, 15 Sep 2007 17:18:31 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe da ein Problem mit Templateargumenten.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;string&gt;

template &lt;std::string value_one, typename value_two&gt; class value_pair
{
public:
    value_pair ()
    {
        std::cout &lt;&lt; value_one &lt;&lt; &quot; = &quot; &lt;&lt; value_two &lt;&lt; std::endl;
    }
};

int main ()
{
    value_pair&lt;&quot;wert eins&quot;, 555&gt; mein_test;

    return 0;
}
</code></pre>
<p>Ich bekomme bei diesem Code mehrere Fehlermeldungen:</p>
<blockquote>
<p>1&gt;------ Build started: Project: templatetest, Configuration: Debug Win32 ------<br />
1&gt;Compiling...<br />
1&gt;main.cpp<br />
1&gt;main.cpp(4) : error C2993: 'std::string' : illegal type for non-type template parameter 'value_one'<br />
1&gt;main.cpp(15) : error C2762: 'value_pair' : invalid expression as a template argument for 'value_one'<br />
1&gt; main.cpp(5) : see declaration of 'value_pair'<br />
1&gt;main.cpp(15) : error C2133: 'mein_test' : unknown size<br />
1&gt;main.cpp(15) : error C2512: 'value_pair' : no appropriate default constructor available<br />
1&gt;Build log was saved at &quot;file://Debug\BuildLog.htm&quot;<br />
1&gt;templatetest - 4 error(s), 0 warning(s)<br />
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========</p>
</blockquote>
<p>Ich bekomme gesagt, das ich std::string nicht als Typ nehmen kann für parameter 1 und das die Instanz eine unbekannte größe sein würde.</p>
<p>Das mit std::string versteh ich, dadurch das es eine dynamische Klasse ist also den Speicher zur Laufzeit im RAM reserviert, ersetze ich std::string durch char[128] bekomme ich die erste Warnung nicht, doch kompilieren tut er immer noch nicht, wegen eines ungültigen Ausdrucks <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Wie kann ich den Code zum laufen bringen? Bitte keine Verweise auf andere Klassen, ich möchte diese Klasse zu laufen bringen <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="🙂"
    /> Bringt mir ja nichts andere klassen zu benutzen, wenn ich das Prinzip nicht verstehen. <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/1366008</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1366008</guid><dc:creator><![CDATA[C++&#x27;ler]]></dc:creator><pubDate>Sat, 15 Sep 2007 17:18:31 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines großes Problem mit Templateargumenten on Sat, 15 Sep 2007 17:51:10 GMT]]></title><description><![CDATA[<p>Was soll value_two sein? Du führst es als templateabhängigen Typ ein und benutzt es dann im Konstruktor als Objekt.</p>
<p>Das du std::string nicht verwenden darst, hat übrigens nichts mit dynamischer Speicherverwaltung zu tun. Du darfst generell keine Klassen verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1366032</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1366032</guid><dc:creator><![CDATA[Michael E. logged out]]></dc:creator><pubDate>Sat, 15 Sep 2007 17:51:10 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines großes Problem mit Templateargumenten on Sat, 15 Sep 2007 17:54:58 GMT]]></title><description><![CDATA[<p>Michael E. logged out schrieb:</p>
<blockquote>
<p>Das du std::string nicht verwenden darst, hat übrigens nichts mit dynamischer Speicherverwaltung zu tun. Du darfst generell keine Klassen verwenden.</p>
</blockquote>
<p>warum? gibt es eine möglichkeit es doch zu tun?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1366035</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1366035</guid><dc:creator><![CDATA[C++&#x27;ler]]></dc:creator><pubDate>Sat, 15 Sep 2007 17:54:58 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines großes Problem mit Templateargumenten on Sun, 16 Sep 2007 00:03:31 GMT]]></title><description><![CDATA[<p>C++'ler schrieb:</p>
<blockquote>
<p>Michael E. logged out schrieb:</p>
<blockquote>
<p>Das du std::string nicht verwenden darst, hat übrigens nichts mit dynamischer Speicherverwaltung zu tun. Du darfst generell keine Klassen verwenden.</p>
</blockquote>
<p>warum? gibt es eine möglichkeit es doch zu tun?</p>
</blockquote>
<p>non-type-Templateargumente müssen konstante Ausdrücke sein (schließlich soll das Ergebnis wohldeterminiert sein) - zudem gibt es weiter Einschränkungen:<br />
Erlaubt sind nur Ausdücke integralen Typs oder Zeiger auf Funktionen oder statische Objekte, die für den Linker sichtbar sind (external linkage).<br />
Möglich wäre hier z.B.:</p>
<pre><code class="language-cpp">template &lt;const char* value_one, int value_two&gt; class value_pair
...

// const impliziert internal linkage, wenn wir nichts dagegen unternehmen:
extern const char wert1[] = &quot;wert eins&quot;;

int main ()
{
    value_pair&lt;wert1, 555&gt; mein_test;

    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1366041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1366041</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 16 Sep 2007 00:03:31 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines großes Problem mit Templateargumenten on Sat, 15 Sep 2007 23:16:11 GMT]]></title><description><![CDATA[<p>Danke für die gute Antwort camper!</p>
<p>Eine Frage habe ich jedoch: Was ist wenn ich anstatt const char* einfach char[128] nehme? Dann müsste doch genügend Speicher vorhanden sein, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1366130</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1366130</guid><dc:creator><![CDATA[C++&#x27;ler]]></dc:creator><pubDate>Sat, 15 Sep 2007 23:16:11 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines großes Problem mit Templateargumenten on Sun, 16 Sep 2007 11:22:23 GMT]]></title><description><![CDATA[<p>*push it*</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1366250</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1366250</guid><dc:creator><![CDATA[C++&#x27;ler]]></dc:creator><pubDate>Sun, 16 Sep 2007 11:22:23 GMT</pubDate></item><item><title><![CDATA[Reply to Kleines großes Problem mit Templateargumenten on Mon, 17 Sep 2007 09:59:43 GMT]]></title><description><![CDATA[<p>char[128] ist ein Array und damit ein zusammengesetzter Datentyp =&gt; geht nicht. Die einzig gueltigen Typen sind wie schon oben gesagt:</p>
<p>- char, int, short, long (signed und unsigned)<br />
- pointer auf Objekte, Funktionen, Member und Memberfunktionen<br />
Parameter muessen ausserdem const sein bzw. um genauer zu sein, zur Compilezeit ermittelt werden koennen.</p>
<p>Folgende Typen gehen NICHT:<br />
- float, double &amp; Co<br />
- arrays<br />
- structs und Klassen<br />
- variable</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1366795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1366795</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 17 Sep 2007 09:59:43 GMT</pubDate></item></channel></rss>