<?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 Enum]]></title><description><![CDATA[<p>Hallo,</p>
<p>es ist zum Verzweifeln! Die Variable Sort_Pj vom selbstdefinierten Enum-Typ TSort_Pj verweigert die Wertzuweisung.<br />
Das ist umso kurioser, da ich diese Technik schon in vielen Projekten erfolgreich angwendet habe.</p>
<p>Sinn und Zweck:<br />
In einem zweispaltigen Stringgrid mit den Feldern ID und Projektbezeichnung werden die Spalten per Linksklick aufwärts, per Rechtsklick abwärts sortiert.<br />
Dabei wird die Methode xyz aufgerufen, die die Enum-Variable setzt, die wiederum im überladenen Vergleichsoperator &lt; ausgewertet wird, um die nachfolgende sort-Funktion entsprechend zu beeinflussen.</p>
<p>Hier die Zutaten im Groben:<br />
Deklaration des enum in Header-Datei Unit_DM.h</p>
<pre><code class="language-cpp">enum TSort_Pj {sbPj_ID, sbPj_Projektbezeichnung} Sort_Pj;
</code></pre>
<p>Methode zur Spaltenauswahl und Sortierrichtung in Unit_DM.cpp</p>
<pre><code class="language-cpp">void __fastcall TDM::sortiere_Projekt(int iSortierfeld, bool bAufsteigend)
{
    Sort_Pj = iSortierfeld;
    sort(gvProjekt.begin(), gvProjekt.end());
    if(!bAufsteigend){
        reverse(gvProjekt.begin(), gvProjekt.end());
    }
}
</code></pre>
<p>Das Problem tritt in folgender Zeile auf:</p>
<pre><code class="language-cpp">Sort_Pj = iSortierfeld;
</code></pre>
<p>Beim Debuggen zeigt sich dann, dass auch wenn iSortierfeld den Wert 1 hat, dieser nicht an Sort_Pj übergeben wird.</p>
<p>Wie kann das sein?</p>
<p>Gruß Leo</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/124342/problem-mit-enum</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Jul 2026 02:08:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/124342.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 26 Oct 2005 16:20:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Enum on Wed, 26 Oct 2005 16:20:06 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>es ist zum Verzweifeln! Die Variable Sort_Pj vom selbstdefinierten Enum-Typ TSort_Pj verweigert die Wertzuweisung.<br />
Das ist umso kurioser, da ich diese Technik schon in vielen Projekten erfolgreich angwendet habe.</p>
<p>Sinn und Zweck:<br />
In einem zweispaltigen Stringgrid mit den Feldern ID und Projektbezeichnung werden die Spalten per Linksklick aufwärts, per Rechtsklick abwärts sortiert.<br />
Dabei wird die Methode xyz aufgerufen, die die Enum-Variable setzt, die wiederum im überladenen Vergleichsoperator &lt; ausgewertet wird, um die nachfolgende sort-Funktion entsprechend zu beeinflussen.</p>
<p>Hier die Zutaten im Groben:<br />
Deklaration des enum in Header-Datei Unit_DM.h</p>
<pre><code class="language-cpp">enum TSort_Pj {sbPj_ID, sbPj_Projektbezeichnung} Sort_Pj;
</code></pre>
<p>Methode zur Spaltenauswahl und Sortierrichtung in Unit_DM.cpp</p>
<pre><code class="language-cpp">void __fastcall TDM::sortiere_Projekt(int iSortierfeld, bool bAufsteigend)
{
    Sort_Pj = iSortierfeld;
    sort(gvProjekt.begin(), gvProjekt.end());
    if(!bAufsteigend){
        reverse(gvProjekt.begin(), gvProjekt.end());
    }
}
</code></pre>
<p>Das Problem tritt in folgender Zeile auf:</p>
<pre><code class="language-cpp">Sort_Pj = iSortierfeld;
</code></pre>
<p>Beim Debuggen zeigt sich dann, dass auch wenn iSortierfeld den Wert 1 hat, dieser nicht an Sort_Pj übergeben wird.</p>
<p>Wie kann das sein?</p>
<p>Gruß Leo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/901309</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/901309</guid><dc:creator><![CDATA[Leo Freitag]]></dc:creator><pubDate>Wed, 26 Oct 2005 16:20:06 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Enum on Wed, 26 Oct 2005 16:35:26 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Dieses Verhalten kann ich nicht nachvollziehen. Vielleicht zeigt ja nur der Debugger nicht richtig an. Bei der Zuweisung eines int an einen enum-Typ solltest du außerdem noch casten (static_cast). Dann ist wenigstens die Warnung weg.<br />
Wird denn ohne Fehler kompiliert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/901322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/901322</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Wed, 26 Oct 2005 16:35:26 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Enum on Wed, 26 Oct 2005 20:58:53 GMT]]></title><description><![CDATA[<p>der code ist nicht dein ernst oder?</p>
<pre><code class="language-cpp">sort(gvProjekt.begin(), gvProjekt.end());

if (!bAufsteigend)
  reverse(gvProjekt.begin(), gvProjekt.end());
</code></pre>
<p>vielleicht solltest du dir mal die hilfe zu <strong>sort</strong> zu gemüte führen und dann auch gleich die von <strong>less</strong> und <strong>greater</strong>!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/901560</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/901560</guid><dc:creator><![CDATA[Sunday]]></dc:creator><pubDate>Wed, 26 Oct 2005 20:58:53 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Enum on Thu, 27 Oct 2005 08:34:17 GMT]]></title><description><![CDATA[<p>Sunday schrieb:</p>
<blockquote>
<p>der code ist nicht dein ernst oder?</p>
</blockquote>
<p>Danke für die Antwort, aber hilfreicher wäre, wenn Du zumindest andeutungsweise erklären könntest warum Ernst oder nicht!</p>
<p>Gruß<br />
Leo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/901725</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/901725</guid><dc:creator><![CDATA[Leo Freitag]]></dc:creator><pubDate>Thu, 27 Oct 2005 08:34:17 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Enum on Thu, 27 Oct 2005 08:41:43 GMT]]></title><description><![CDATA[<p>Langversion: Es ist etwas sinnlos, die Liste erst aufsteigend zu sortieren und dann die Reihenfolge umzukehren. Besser wäre es, gleich absteigend zu sortieren:</p>
<pre><code class="language-cpp">if(bAufsteigend)
  sort(gvProjekt.begin(), gvProjekt.end());
else
  sort(gvProjekt.begin(), gvProjekt.end(),greater&lt;...&gt;);
</code></pre>
<p>Außerdem ist es sort() egal, was für Variablen du lokal definiert hast, also macht die Zeile &quot;Sort_Pj = iSortierfeld;&quot; keinen wirklichen Sinn für mich. (aber das kann auch daran liegen, daß ich deinen Vergleichsoperator nicht kenne)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/901731</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/901731</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 27 Oct 2005 08:41:43 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Enum on Thu, 27 Oct 2005 08:44:35 GMT]]></title><description><![CDATA[<p>bzw.</p>
<pre><code class="language-cpp">if(bAufsteigend)
  sort(gvProjekt.begin(), gvProjekt.end());
else
  sort(gvProjekt.rbegin(), gvProjekt.rend());
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/901736</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/901736</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Thu, 27 Oct 2005 08:44:35 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Enum on Thu, 27 Oct 2005 08:57:53 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>(...)<br />
Außerdem ist es sort() egal, was für Variablen du lokal definiert hast, also macht die Zeile &quot;Sort_Pj = iSortierfeld;&quot; keinen wirklichen Sinn für mich. (aber das kann auch daran liegen, daß ich deinen Vergleichsoperator nicht kenne)</p>
</blockquote>
<p>Mein Vector gvProjekt ist vom Typ struct:</p>
<pre><code class="language-cpp">struct TProjekt{
    int iID_Projekt;
    char cProjektbezeichnung[PROJEKTBEZEICHNUNG_MAX+1];
};
</code></pre>
<p>Daher auch die erforderliche Operatorüberladung, bevor sort() für diesen Typ sinnvoll genutzt werden kann:</p>
<pre><code class="language-cpp">bool operator&lt;(const TProjekt&amp; B1, const TProjekt&amp; B2)
{
    if(Sort_Pj == sbPj_ID)
        return B1.iID_Projekt &lt; B2.iID_Projekt;
    else if (Sort_Pj == sbPj_Projektbezeichnung)
        return stricmp(B1.cProjektbezeichnung, B2.cProjektbezeichnung) &lt; 0;
    else{
        ShowMessage(&quot;Unzulässiger Sortierbegriff in Pj&quot;);
        return false;
    }
};
</code></pre>
<p>Von daher kommt der Variablen Sort_Pj durchaus eine gewisse Bedeutung zu.</p>
<p>Gruß<br />
Leo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/901748</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/901748</guid><dc:creator><![CDATA[Leo Freitag]]></dc:creator><pubDate>Thu, 27 Oct 2005 08:57:53 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Enum on Thu, 27 Oct 2005 10:02:46 GMT]]></title><description><![CDATA[<p>Leo Freitag schrieb:</p>
<blockquote>
<p>es ist zum Verzweifeln! Die Variable Sort_Pj vom selbstdefinierten Enum-Typ TSort_Pj verweigert die Wertzuweisung.<br />
Das ist umso kurioser, da ich diese Technik schon in vielen Projekten erfolgreich angwendet habe.</p>
</blockquote>
<p>Habe die Ursache gefunden. Bei früheren Projekten ist unter Projektoptionen/ Erweiterte Compileroptionen die Datenausrichtung auf Byte eingestellt. Im aktuellen Projekt dagegen auf Quad word. Bei Einstellung von Byte funktioniert alles einwandfrei.</p>
<p>Auch wenn es toll ist, dass die Zuweisung zu Sort_Pj nun wie gewünscht funktioniert, würde ich doch gerne wissen, worin der Zusammenhang besteht.</p>
<p>Gruß Leo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/901795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/901795</guid><dc:creator><![CDATA[Leo Freitag]]></dc:creator><pubDate>Thu, 27 Oct 2005 10:02:46 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Enum on Thu, 27 Oct 2005 10:16:10 GMT]]></title><description><![CDATA[<p>Der Fehler liegt darin, daß Zuweisungen von int o.ä. nach enum offiziell (sprich: nach C++-Standard) nicht erlaubt sind. Da liegt es am Compiler, ob und wie er das umsetzt.<br />
Klappt denn dein Programm, wenn du expizit castest (&quot;Sort_Pj = TSortPj(iSortierfeld);&quot;) bzw. den Parameter iSortierfeld als TSort_Pj deklarierst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/901805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/901805</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 27 Oct 2005 10:16:10 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Enum on Fri, 28 Oct 2005 10:04:56 GMT]]></title><description><![CDATA[<p>Leo Freitag schrieb:</p>
<blockquote>
<p>Habe die Ursache gefunden.<br />
(...)</p>
</blockquote>
<p>Nein doch nicht! Leider zu früh gefreut. Da war wohl die Sehnsucht größer als der klare Blick, habe schlicht nicht richtig hingeschaut - sorry.<br />
Das Problem, dass Sort_Pj die Zuweisung verweigert, besteht nach wie vor.</p>
<p>Gruß<br />
Leo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/902597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/902597</guid><dc:creator><![CDATA[Leo Freitag]]></dc:creator><pubDate>Fri, 28 Oct 2005 10:04:56 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Enum on Fri, 28 Oct 2005 10:12:39 GMT]]></title><description><![CDATA[<p>(eventuell) dumme Frage: Wo genau hast du Sort_Pj definiert? Und von wo aus willst du es ändern?<br />
(damit meine ich jetzt weniger die Funktionen, sondern deren Aufteilung auf cpp/h-Dateien)</p>
<p>Und hast du es mal mit einem expliziten Cast nach TSort_Pj versucht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/902605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/902605</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 28 Oct 2005 10:12:39 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Enum on Sat, 29 Oct 2005 09:54:15 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>(eventuell) dumme Frage: Wo genau hast du Sort_Pj definiert? Und von wo aus willst du es ändern?<br />
(damit meine ich jetzt weniger die Funktionen, sondern deren Aufteilung auf cpp/h-Dateien)<br />
Und hast du es mal mit einem expliziten Cast nach TSort_Pj versucht?</p>
</blockquote>
<p>Hallo,</p>
<p>Sort_Pj deklariere ich im Kopf von Unit_DM.h, unterhalb der #define-Anweisungen</p>
<pre><code class="language-cpp">enum TSort_Pj {sbPj_ID, sbPj_Projektbezeichnung} Sort_Pj;
</code></pre>
<p>Dann folgen die Struct-Definitionen, u.a.:</p>
<pre><code class="language-cpp">struct TProjekt{
    int iID_Projekt;
    char cProjektbezeichnung[PROJEKTBEZEICHNUNG_MAX+1];
    // (...)
};
</code></pre>
<p>und unterhalb davon die Operator-Überladung:</p>
<pre><code class="language-cpp">bool operator&lt;(const TProjekt&amp; B1, const TProjekt&amp; B2)
{
    if(Sort_Pj == sbPj_ID)
        return B1.iID_Projekt &lt; B2.iID_Projekt;
    else if (Sort_Pj == sbPj_Projektbezeichnung)
        return stricmp(B1.cProjektbezeichnung, B2.cProjektbezeichnung) &lt; 0;
    else{
        ShowMessage(&quot;Unzulässiger Sortierbegriff in Pj&quot;);
        return false;
    }
};
</code></pre>
<p>Die Zuweisungen zu Sort_Pj erfolgt ausschließlich in der folgenden Methode in Unit_DM.cpp:</p>
<pre><code class="language-cpp">void __fastcall TDM::sortiere_Projekt(int iSortierfeld, bool bAufsteigend)
{
    Sort_Pj = iSortierfeld;
    // Sort_Pj = TSort_Pj(iSortierfeld); // funktioniert nicht
    // Sort_Pj = sbPj_Projektbezeichnung; // f. n.
    // Sort_Pj = (TSort_Pj)iSortierfeld; // f. n.
    // Sort_Pj = static_cast&lt;TSort_Pj&gt;(iSortierfeld); // f. n.

    sort(gvProjekt.begin(), gvProjekt.end());
    if(!bAufsteigend){
        reverse(gvProjekt.begin(), gvProjekt.end());
    }
}
</code></pre>
<p>Gruß Leo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/903249</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/903249</guid><dc:creator><![CDATA[Leo Freitag]]></dc:creator><pubDate>Sat, 29 Oct 2005 09:54:15 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Enum on Sat, 29 Oct 2005 09:59:32 GMT]]></title><description><![CDATA[<p>Mir würde auf Anhieb nur noch eins einfallen: ODR (One Definition Rule). Verschieb' mal die Definition von Sort_Pj in die .cpp Datei.</p>
<p>(PS: Hat es einen Grund, daß du der sortiere_Projekt() keinen TSort_Pj als Parameter übergibst?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/903252</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/903252</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 29 Oct 2005 09:59:32 GMT</pubDate></item></channel></rss>