<?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[invalid conversion ...]]></title><description><![CDATA[<p>Hallo,<br />
ich bin dabei, ein etwas älteres Programm unter gcc 3.3 compilierfähig zu machen. Vermutlich gab es bei älteren Compilern keine Probleme. Nun denn, einiges konnte ich beheben, doch bei dem folgenden verliere ich den Durchblick:</p>
<pre><code>g++ -c ui_mgr.c
ui_mgr.c: In function `void ui_event_mouse_func(int, int, int, int)':
ui_mgr.c:231: error: invalid conversion from `int' to `winsys_mouse_button_t'
</code></pre>
<p>Die angemeckerte Stelle im Programm:</p>
<pre><code>void ui_event_mouse_func( int button, int state, int x, int y ) {
...

    if ( state == WS_MOUSE_DOWN ) {
	trigger_mouse_button_cbs( mouse_down_cbs, button, x, y ); // Zeile 231
    } else {
	trigger_mouse_button_cbs( mouse_up_cbs, button, x, y );
    }
...
}
</code></pre>
<p>Die betroffene Funktion steht im selben Modul oberhalb:</p>
<pre><code>static void trigger_mouse_button_cbs
	( hash_table_t table, winsys_mouse_button_t button, int x, int y )
{
    hash_search_t iter;
    ui_callback_data_t *cb_data;

    begin_hash_scan( table, &amp;iter );
    while ( next_hash_entry( iter, NULL, (hash_entry_t*)&amp;cb_data ) ) {
	((mouse_button_event_cb_t)cb_data-&gt;cb)( 
	    cb_data-&gt;widget, (winsys_mouse_button_t) button, x, y );

	if ( is_mode_change_pending() ) { break;}
    }
    end_hash_scan( iter );
}
</code></pre>
<p>Der inkompatible Typ schließlich ist in einem anderen Modul folgendermaßen festgelegt:</p>
<pre><code>typedef enum {
    WS_LEFT_BUTTON = GLUT_LEFT_BUTTON,
    WS_MIDDLE_BUTTON = GLUT_MIDDLE_BUTTON,
    WS_RIGHT_BUTTON = GLUT_RIGHT_BUTTON 
} winsys_mouse_button_t;
</code></pre>
<p>Wo hakt es, und wo kann ich eingreifen, um die Sache stimmig zu machen?</p>
<p>Reinhard</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/172076/invalid-conversion</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 16:10:59 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/172076.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 01 Feb 2007 09:31:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to invalid conversion ... on Thu, 01 Feb 2007 09:31:56 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich bin dabei, ein etwas älteres Programm unter gcc 3.3 compilierfähig zu machen. Vermutlich gab es bei älteren Compilern keine Probleme. Nun denn, einiges konnte ich beheben, doch bei dem folgenden verliere ich den Durchblick:</p>
<pre><code>g++ -c ui_mgr.c
ui_mgr.c: In function `void ui_event_mouse_func(int, int, int, int)':
ui_mgr.c:231: error: invalid conversion from `int' to `winsys_mouse_button_t'
</code></pre>
<p>Die angemeckerte Stelle im Programm:</p>
<pre><code>void ui_event_mouse_func( int button, int state, int x, int y ) {
...

    if ( state == WS_MOUSE_DOWN ) {
	trigger_mouse_button_cbs( mouse_down_cbs, button, x, y ); // Zeile 231
    } else {
	trigger_mouse_button_cbs( mouse_up_cbs, button, x, y );
    }
...
}
</code></pre>
<p>Die betroffene Funktion steht im selben Modul oberhalb:</p>
<pre><code>static void trigger_mouse_button_cbs
	( hash_table_t table, winsys_mouse_button_t button, int x, int y )
{
    hash_search_t iter;
    ui_callback_data_t *cb_data;

    begin_hash_scan( table, &amp;iter );
    while ( next_hash_entry( iter, NULL, (hash_entry_t*)&amp;cb_data ) ) {
	((mouse_button_event_cb_t)cb_data-&gt;cb)( 
	    cb_data-&gt;widget, (winsys_mouse_button_t) button, x, y );

	if ( is_mode_change_pending() ) { break;}
    }
    end_hash_scan( iter );
}
</code></pre>
<p>Der inkompatible Typ schließlich ist in einem anderen Modul folgendermaßen festgelegt:</p>
<pre><code>typedef enum {
    WS_LEFT_BUTTON = GLUT_LEFT_BUTTON,
    WS_MIDDLE_BUTTON = GLUT_MIDDLE_BUTTON,
    WS_RIGHT_BUTTON = GLUT_RIGHT_BUTTON 
} winsys_mouse_button_t;
</code></pre>
<p>Wo hakt es, und wo kann ich eingreifen, um die Sache stimmig zu machen?</p>
<p>Reinhard</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220948</guid><dc:creator><![CDATA[erin]]></dc:creator><pubDate>Thu, 01 Feb 2007 09:31:56 GMT</pubDate></item><item><title><![CDATA[Reply to invalid conversion ... on Thu, 01 Feb 2007 09:51:59 GMT]]></title><description><![CDATA[<p>In C konntest du noch implizit von int nach enum casten, in C++ brauchst du dafür einen expliziten Cast:</p>
<pre><code class="language-cpp">trigger_mouse_button_cbs( mouse_down_cbs, (winsys_mouse_button_t)button, x, y );
</code></pre>
<p>(oder noch besser - du deklarierst den zweiten Parameter deiner Funktion gleich mit dem richtigen Typ, dann mußt du nichts konvertieren)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1220965</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1220965</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 01 Feb 2007 09:51:59 GMT</pubDate></item><item><title><![CDATA[Reply to invalid conversion ... on Thu, 01 Feb 2007 13:11:41 GMT]]></title><description><![CDATA[<p>Ja, dein erster Vorschlag funktioniert. Das Umdeklarieren des Parameters hatte ich schon versucht, aber da bekam ich gehörig Krach mit den anderen Modulen, die nun ebenfalls angepasst werden wollten (sind insgesamt mehr als 70 Module, das Programm ist nicht von mir). Regelrechter Rattenschwanz.</p>
<p>Danke<br />
Reinhard</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1221104</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1221104</guid><dc:creator><![CDATA[erin]]></dc:creator><pubDate>Thu, 01 Feb 2007 13:11:41 GMT</pubDate></item></channel></rss>