<?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[6.0 -&gt; .net 2003]]></title><description><![CDATA[<p>Hi,</p>
<p>folgende Fragen zu Visual Studio .net 2003:</p>
<p>- Hier krieg ich eine Warnung:</p>
<pre><code>String String::operator +(const String &amp;String) const
{
    return *this + static_cast&lt;std::string&gt;(String);
}
</code></pre>
<blockquote>
<p>warning C4717: 'AGE::String::operator+': Rekursiv für alle Steuerelementpfade. Die Funktion verursacht einen Stapelüberlauf zur Laufzeit.</p>
</blockquote>
<p>Dabei ist String von std::string abgeleitet und implementiert keinen String::operator +(std::string), d.h. es gibt garantiert keinen Stapelüberlauf, da einfach der +-Operator der Basisklasse verwendet wird!</p>
<ul>
<li></li>
</ul>
<pre><code>void DataStorageMgr::UnregisterDataDirectoryFactory(const String &amp;strName)
{
    GUARD(DataStorageMgr::UnregisterDataDirectoryFactory);

    // Remove specified instance of DataDirectory::Factory from the map
    DataDirectoryFactoryMap::iterator i = m_DataDirectoryFactoryMap.find(strName);
    if (i != m_DataDirectoryFactoryMap.end())
        m_DataDirectoryFactoryMap.erase(i);
    else
        AGEERROR(DataDirectoryFactoryNotFoundException, &quot;Data storage factory '&quot; + strName + &quot;' not found!&quot;);

    UNGUARD;
}

DataDirectory::Factory &amp;DataStorageMgr::GetDataDirectoryFactory(const String &amp;strName) const
{
    GUARD(DataStorageMgr::GetDataDirectoryFactory);

    // Return Pointer to specified instance of TScriptLanguage
    DataDirectoryFactoryMap::iterator i = m_DataDirectoryFactoryMap.find(strName);
    if (i != m_DataDirectoryFactoryMap.end())
        return *(i-&gt;second);
    else
        AGEERROR(DataDirectoryFactoryNotFoundException, &quot;Data storage factory '&quot; + strName + &quot;' not found!&quot;);

    UNGUARD;
}
</code></pre>
<p>In Visual C++ 6.0 hat das problemlos compiliert, aber damit es in .net 2003 compiliert, muss ich aus dem Iterator in der zweiten Funktion einen const_iterator machen. Erst dachte ich, dass die STL halt etwas verbessert wurde bzgl. const correctness, aber in der ersten Funktion akzeptiert er den (nichtkonstanten) Iterator?</p>
<p>ChrisM</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/6388/6-0-net-2003</link><generator>RSS for Node</generator><lastBuildDate>Sun, 19 Apr 2026 02:03:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/6388.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 29 Jun 2003 14:16:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 6.0 -&gt; .net 2003 on Sun, 29 Jun 2003 14:16:00 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>folgende Fragen zu Visual Studio .net 2003:</p>
<p>- Hier krieg ich eine Warnung:</p>
<pre><code>String String::operator +(const String &amp;String) const
{
    return *this + static_cast&lt;std::string&gt;(String);
}
</code></pre>
<blockquote>
<p>warning C4717: 'AGE::String::operator+': Rekursiv für alle Steuerelementpfade. Die Funktion verursacht einen Stapelüberlauf zur Laufzeit.</p>
</blockquote>
<p>Dabei ist String von std::string abgeleitet und implementiert keinen String::operator +(std::string), d.h. es gibt garantiert keinen Stapelüberlauf, da einfach der +-Operator der Basisklasse verwendet wird!</p>
<ul>
<li></li>
</ul>
<pre><code>void DataStorageMgr::UnregisterDataDirectoryFactory(const String &amp;strName)
{
    GUARD(DataStorageMgr::UnregisterDataDirectoryFactory);

    // Remove specified instance of DataDirectory::Factory from the map
    DataDirectoryFactoryMap::iterator i = m_DataDirectoryFactoryMap.find(strName);
    if (i != m_DataDirectoryFactoryMap.end())
        m_DataDirectoryFactoryMap.erase(i);
    else
        AGEERROR(DataDirectoryFactoryNotFoundException, &quot;Data storage factory '&quot; + strName + &quot;' not found!&quot;);

    UNGUARD;
}

DataDirectory::Factory &amp;DataStorageMgr::GetDataDirectoryFactory(const String &amp;strName) const
{
    GUARD(DataStorageMgr::GetDataDirectoryFactory);

    // Return Pointer to specified instance of TScriptLanguage
    DataDirectoryFactoryMap::iterator i = m_DataDirectoryFactoryMap.find(strName);
    if (i != m_DataDirectoryFactoryMap.end())
        return *(i-&gt;second);
    else
        AGEERROR(DataDirectoryFactoryNotFoundException, &quot;Data storage factory '&quot; + strName + &quot;' not found!&quot;);

    UNGUARD;
}
</code></pre>
<p>In Visual C++ 6.0 hat das problemlos compiliert, aber damit es in .net 2003 compiliert, muss ich aus dem Iterator in der zweiten Funktion einen const_iterator machen. Erst dachte ich, dass die STL halt etwas verbessert wurde bzgl. const correctness, aber in der ersten Funktion akzeptiert er den (nichtkonstanten) Iterator?</p>
<p>ChrisM</p>
]]></description><link>https://www.c-plusplus.net/forum/post/30977</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/30977</guid><dc:creator><![CDATA[ChrisM]]></dc:creator><pubDate>Sun, 29 Jun 2003 14:16:00 GMT</pubDate></item><item><title><![CDATA[Reply to 6.0 -&gt; .net 2003 on Sun, 29 Jun 2003 14:20:00 GMT]]></title><description><![CDATA[<p>lern erstmal programmieren, bevor du mit solchen profi tools arbeitest. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/30978</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/30978</guid><dc:creator><![CDATA[hans]]></dc:creator><pubDate>Sun, 29 Jun 2003 14:20:00 GMT</pubDate></item><item><title><![CDATA[Reply to 6.0 -&gt; .net 2003 on Sun, 29 Jun 2003 14:26:00 GMT]]></title><description><![CDATA[<p>Tolle Antwort, wirklich.</p>
<p>Zumindest mein String::operator+() ist ja wohl standardkonform, oder?</p>
<p>ChrisM</p>
]]></description><link>https://www.c-plusplus.net/forum/post/30979</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/30979</guid><dc:creator><![CDATA[ChrisM]]></dc:creator><pubDate>Sun, 29 Jun 2003 14:26:00 GMT</pubDate></item><item><title><![CDATA[Reply to 6.0 -&gt; .net 2003 on Sun, 29 Jun 2003 14:51:00 GMT]]></title><description><![CDATA[<p>Im Operator + kannst du doch nicht den Operator + selbst benutzen. Das wäre doch dann eine Rekursion und würde nie aufhören.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/30980</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/30980</guid><dc:creator><![CDATA[gremlin]]></dc:creator><pubDate>Sun, 29 Jun 2003 14:51:00 GMT</pubDate></item><item><title><![CDATA[Reply to 6.0 -&gt; .net 2003 on Sun, 29 Jun 2003 14:53:00 GMT]]></title><description><![CDATA[<p>zu 1: Gibt es eine Möglichkeit (per nicht expliziten Konstruktor),daß std::string in AGE::String konvertiert wird?</p>
<p>zu 2: Erscheint mir alles korrekt.<br />
UnregisterDataDirectoryFactory ist eine nicht konstante Memberfunktion,warum sollte dann der iterator const sein müssen?<br />
GetDataDirectoryFactory ist hingegen const,also muß der iterator auch const sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/30981</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/30981</guid><dc:creator><![CDATA[___]]></dc:creator><pubDate>Sun, 29 Jun 2003 14:53:00 GMT</pubDate></item><item><title><![CDATA[Reply to 6.0 -&gt; .net 2003 on Mon, 30 Jun 2003 06:30:00 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/197">@ChrisM</a></p>
<pre><code class="language-cpp">String String::operator +(const String &amp;String) const
{
    return *this + static_cast&lt;std::string&gt;(String);
}
</code></pre>
<blockquote>
<p>Zumindest mein String::perator+() ist ja wohl standardkonform, oder?</p>
</blockquote>
<p>Standardkonform ja, aber rein vom logischen her unmöglich.<br />
Kleiner Denkanstoss:<br />
(*this) ist vom Typ String. Das heisst, es ist egal, ob der Typ hinter dem + nun gecastet wird oder nicht, es wird immer der Operator + der Klasse String aufgerufen und nie der der Basisklasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/30982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/30982</guid><dc:creator><![CDATA[RenéG]]></dc:creator><pubDate>Mon, 30 Jun 2003 06:30:00 GMT</pubDate></item><item><title><![CDATA[Reply to 6.0 -&gt; .net 2003 on Mon, 30 Jun 2003 11:47:00 GMT]]></title><description><![CDATA[<p>Ja, aber wenn die abgeleitete Klasse String keinen operator+(std::string) bietet, wird doch automatisch der operator+(std::string) der Basisklasse aufgerufen, oder?</p>
<p>Oder soll ich auch noch ein static_cast&lt;&gt;() für den ersten String einbauen?</p>
<p>Das andere Problem hat sich geklärt, weil ich grade gemerkt habe, dass es zwei Varianten von std:<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f5fa.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--world_map"
      title=":map:"
      alt="🗺"
    />:find() gibt: Eine, die einen iterator zurückgibt, und eine, die einen const_iterator zurückgibt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>ChrisM</p>
]]></description><link>https://www.c-plusplus.net/forum/post/30983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/30983</guid><dc:creator><![CDATA[ChrisM]]></dc:creator><pubDate>Mon, 30 Jun 2003 11:47:00 GMT</pubDate></item><item><title><![CDATA[Reply to 6.0 -&gt; .net 2003 on Mon, 30 Jun 2003 12:37:00 GMT]]></title><description><![CDATA[<blockquote>
<p>Ja, aber wenn die abgeleitete Klasse String keinen operator+(std::string) bietet, wird doch automatisch der operator+(std::string) der Basisklasse aufgerufen, oder?</p>
</blockquote>
<p>Was passiert denn Deiner Meinung nach dann, wenn die aktuelle Klasse von 2 Klassen abgeleitet ist, die den operator+(std::string) implementieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/30984</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/30984</guid><dc:creator><![CDATA[RenéG]]></dc:creator><pubDate>Mon, 30 Jun 2003 12:37:00 GMT</pubDate></item><item><title><![CDATA[Reply to 6.0 -&gt; .net 2003 on Mon, 30 Jun 2003 15:05:00 GMT]]></title><description><![CDATA[<p>Compilerfehler?</p>
<p>OK, hab jetzt auch den ersten Parameter static_gecasted (kein Overhead), mich wunderts halt nur, dass es unter VC++ 6.0 wunderbar funktioniert hat.</p>
<p>ChrisM</p>
]]></description><link>https://www.c-plusplus.net/forum/post/30985</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/30985</guid><dc:creator><![CDATA[ChrisM]]></dc:creator><pubDate>Mon, 30 Jun 2003 15:05:00 GMT</pubDate></item></channel></rss>