<?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[va_start und non-POD]]></title><description><![CDATA[<p>ich habe einge einge String Klasse geschrieben und möchte diese nun an eine Funktion mit einer Variablenanzahl von Parametern übergeben</p>
<pre><code class="language-cpp">class ServUDllStr
{
	public:
		ServUDllStr();
		ServUDllStr( char c );
		ServUDllStr( const char* pszString );
		ServUDllStr( const string&amp; sString );
	// ...
};

bool SendF( const ServUDllStr&amp; sFormat, ... )
{

	va_list va;
	va_start( va, sFormat );
	// ...
}
</code></pre>
<p>das ganze läuft ohne Problem mit Visual Studio, jedoch meint gcc</p>
<blockquote>
<p>[...] warning: cannot pass objects of non-POD type `const class ServUDllStr' through `...'; call will abort at runtime<br />
[...] warning: second parameter of `va_start' not last named argument</p>
</blockquote>
<p>wie cann ich meine Klasse zu einem POD type machen?</p>
<p>vielen Dank im Vorraus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/155117/va_start-und-non-pod</link><generator>RSS for Node</generator><lastBuildDate>Tue, 08 Sep 2026 10:33:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/155117.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 02 Aug 2006 19:12:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to va_start und non-POD on Wed, 02 Aug 2006 19:12:21 GMT]]></title><description><![CDATA[<p>ich habe einge einge String Klasse geschrieben und möchte diese nun an eine Funktion mit einer Variablenanzahl von Parametern übergeben</p>
<pre><code class="language-cpp">class ServUDllStr
{
	public:
		ServUDllStr();
		ServUDllStr( char c );
		ServUDllStr( const char* pszString );
		ServUDllStr( const string&amp; sString );
	// ...
};

bool SendF( const ServUDllStr&amp; sFormat, ... )
{

	va_list va;
	va_start( va, sFormat );
	// ...
}
</code></pre>
<p>das ganze läuft ohne Problem mit Visual Studio, jedoch meint gcc</p>
<blockquote>
<p>[...] warning: cannot pass objects of non-POD type `const class ServUDllStr' through `...'; call will abort at runtime<br />
[...] warning: second parameter of `va_start' not last named argument</p>
</blockquote>
<p>wie cann ich meine Klasse zu einem POD type machen?</p>
<p>vielen Dank im Vorraus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1109502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1109502</guid><dc:creator><![CDATA[ScriptGod]]></dc:creator><pubDate>Wed, 02 Aug 2006 19:12:21 GMT</pubDate></item><item><title><![CDATA[Reply to va_start und non-POD on Wed, 02 Aug 2006 20:35:44 GMT]]></title><description><![CDATA[<p>ScriptGod schrieb:</p>
<blockquote>
<p>ich habe einge einge String Klasse geschrieben und möchte diese nun an eine Funktion mit einer Variablenanzahl von Parametern übergeben</p>
</blockquote>
<p>lass es besser bleiben. überladene funktionstemplates oder verkettung von funktionsaufrufen ist i.allg. die bessere methode.</p>
<blockquote>
<pre><code class="language-cpp">class ServUDllStr
{
	public:
		ServUDllStr();
		ServUDllStr( char c );
		ServUDllStr( const char* pszString );
		ServUDllStr( const string&amp; sString );
	// ...
};

bool SendF( const ServUDllStr&amp; sFormat, ... )
{

	va_list va;
	va_start( va, sFormat );
	// ...
}
</code></pre>
<p>das ganze läuft ohne Problem mit Visual Studio, jedoch meint gcc</p>
<blockquote>
<p>[...] warning: cannot pass objects of non-POD type `const class ServUDllStr' through `...'; call will abort at runtime<br />
[...] warning: second parameter of `va_start' not last named argument</p>
</blockquote>
<p>wie cann ich meine Klasse zu einem POD type machen?</p>
</blockquote>
<p>das ist sogar in zweierlei hinsicht verboten, denn der 2. parameter von va_start darf keine referenz sein<br />
ein POD wirst du kaum als stringklasse verwenden können, denn ein POD hat u.a. keine selbstdefinierten konstruktoren und destruktoren - damit fällt dynamische speicherverwaltung schon mal aus (ein smartpointer hilft auch nicht, denn ein POD kann selbst nur POD-member haben).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1109530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1109530</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 02 Aug 2006 20:35:44 GMT</pubDate></item><item><title><![CDATA[Reply to va_start und non-POD on Wed, 02 Aug 2006 20:38:52 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>Also grob gesagt haben POD-Typen keine V-Tables (also keine Virtuellen Funktionen, wurden nirgendwo abgeleitet etc)<br />
Auch dürfen POD-Typen keine &quot;nicht-POD-Typen&quot; enthalten.</p>
<p>Alle eingebauten Typen wie (int, char, long,...) etc sind POD-Typen ausserdem zählen auch Zeiger dazu.</p>
<p>Strukturen können POD-Typen sein wenn Sie den oben genannten Anforderungen entsprechen.</p>
<p>BR<br />
Vinzenz</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1109531</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1109531</guid><dc:creator><![CDATA[evilissimo]]></dc:creator><pubDate>Wed, 02 Aug 2006 20:38:52 GMT</pubDate></item><item><title><![CDATA[Reply to va_start und non-POD on Wed, 02 Aug 2006 23:53:45 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>ScriptGod schrieb:</p>
<blockquote>
<p>ich habe einge einge String Klasse geschrieben und möchte diese nun an eine Funktion mit einer Variablenanzahl von Parametern übergeben</p>
</blockquote>
<p>lass es besser bleiben. überladene funktionstemplates oder verkettung von funktionsaufrufen ist i.allg. die bessere methode.</p>
</blockquote>
<p>Ich brauchte eine String-Klasse, die etwas mehr bereitstellte als die Standard string-Llasse - unter anderem nicht case-sensitive etc - Ich fand das ein wenig unelegant, das in extra &quot;globale&quot; Methoden oder eine eigene Klasse zu packen.</p>
<p>Aber Danke mal für eure Antworten... in meinem Fall hab ich das einfach auf ein const char* geändert, reicht für den Zweck auch aus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1109598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1109598</guid><dc:creator><![CDATA[ScriptGod]]></dc:creator><pubDate>Wed, 02 Aug 2006 23:53:45 GMT</pubDate></item><item><title><![CDATA[Reply to va_start und non-POD on Thu, 03 Aug 2006 14:43:38 GMT]]></title><description><![CDATA[<p>Andere Idee: Überlade den Operator ',', so wie es auch Boost::Spirit macht, z.B. um Symboltabellen zu initialisieren [1]. Hierzu braucht man eine Zusatzklasse, welche die Stringvariablen zusammensammelt (in der Datei boost/spirit/symbols/symbols.hpp findet sich ein Beispielcode).</p>
<p>Diese Lösung finde ich zwar auch problematisch, weil sie das POLS vollkommen zerstört, aber das ist in C++ sowieso nicht oft gegeben.</p>
<p>[1] <a href="http://spirit.sourceforge.net/distrib/spirit_1_8_3/libs/spirit/doc/symbols.html" rel="nofollow">http://spirit.sourceforge.net/distrib/spirit_1_8_3/libs/spirit/doc/symbols.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1109999</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1109999</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Thu, 03 Aug 2006 14:43:38 GMT</pubDate></item><item><title><![CDATA[Reply to va_start und non-POD on Fri, 04 Aug 2006 14:12:30 GMT]]></title><description><![CDATA[<p>danke für die Idee, jedoch werde ich aus dem Beispiel nicht wirklich schlau, wie man den operator definieren muss, und wie das mir bei meinem Problem helfen kann</p>
<p>und google gibt auch nicht wirklich viel, über den operator her</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1110615</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1110615</guid><dc:creator><![CDATA[ScriptGod]]></dc:creator><pubDate>Fri, 04 Aug 2006 14:12:30 GMT</pubDate></item></channel></rss>