<?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[Fehlersuche: Problem beim Aufruf von operator!=]]></title><description><![CDATA[<pre><code class="language-cpp">ba::parsetree&amp; ba::parse( lexer&amp; source, parsetree&amp; dest )
{
    // source.get_next() -&gt; const ba::token&amp; ba::lexer::get_next()
    // lexer::end ist ein static member vom typ const token
	while ( source.get_next() != lexer::end )
	{
	}
	return dest;
}
</code></pre>
<pre><code class="language-cpp">inline bool operator==( const token&amp; tok ) const;
inline bool operator!=( const token&amp; tok ) const;
</code></pre>
<blockquote>
<p>-------------- Build: debug in core ---------------</p>
<p>Compiling: parser.cpp<br />
/home/wyfrn/projects/studium/ba2/core/parser.cpp: In function »ba::parsetree&amp; ba::parse(ba::lexer&amp;, ba::parsetree&amp;)«:<br />
/home/wyfrn/projects/studium/ba2/core/parser.cpp:7: Fehler: no match für »operator!=« in »((ba::lexer*)source)-&gt;ba::lexer::get_next() != ba::lexer::end«<br />
/home/wyfrn/projects/studium/ba2/core/token.hpp:96: Anmerkung: Kandidaten sind: bool ba::token::operator!=(const ba::token&amp;) const<br />
Process terminated with status 1 (0 minutes, 1 seconds)<br />
2 errors, 0 warnings</p>
</blockquote>
<p>Insbesondere die zweite Zeile der Fehlermeldung kann ich grad garnicht nachvollziehen. Fällt jemandem etwas auf oder habt ihr vlt Tipps / Hinweise den Fehler einzugrenzen! Schonmal ein Danke im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/246847/fehlersuche-problem-beim-aufruf-von-operator</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 20:50:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/246847.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 02 Aug 2009 17:37:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Fehlersuche: Problem beim Aufruf von operator!= on Sun, 02 Aug 2009 17:37:13 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">ba::parsetree&amp; ba::parse( lexer&amp; source, parsetree&amp; dest )
{
    // source.get_next() -&gt; const ba::token&amp; ba::lexer::get_next()
    // lexer::end ist ein static member vom typ const token
	while ( source.get_next() != lexer::end )
	{
	}
	return dest;
}
</code></pre>
<pre><code class="language-cpp">inline bool operator==( const token&amp; tok ) const;
inline bool operator!=( const token&amp; tok ) const;
</code></pre>
<blockquote>
<p>-------------- Build: debug in core ---------------</p>
<p>Compiling: parser.cpp<br />
/home/wyfrn/projects/studium/ba2/core/parser.cpp: In function »ba::parsetree&amp; ba::parse(ba::lexer&amp;, ba::parsetree&amp;)«:<br />
/home/wyfrn/projects/studium/ba2/core/parser.cpp:7: Fehler: no match für »operator!=« in »((ba::lexer*)source)-&gt;ba::lexer::get_next() != ba::lexer::end«<br />
/home/wyfrn/projects/studium/ba2/core/token.hpp:96: Anmerkung: Kandidaten sind: bool ba::token::operator!=(const ba::token&amp;) const<br />
Process terminated with status 1 (0 minutes, 1 seconds)<br />
2 errors, 0 warnings</p>
</blockquote>
<p>Insbesondere die zweite Zeile der Fehlermeldung kann ich grad garnicht nachvollziehen. Fällt jemandem etwas auf oder habt ihr vlt Tipps / Hinweise den Fehler einzugrenzen! Schonmal ein Danke im Voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1754119</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1754119</guid><dc:creator><![CDATA[quarx]]></dc:creator><pubDate>Sun, 02 Aug 2009 17:37:13 GMT</pubDate></item><item><title><![CDATA[Reply to Fehlersuche: Problem beim Aufruf von operator!= on Sun, 02 Aug 2009 19:43:48 GMT]]></title><description><![CDATA[<p>quarx schrieb:</p>
<blockquote>
<pre><code class="language-cpp">ba::parsetree&amp; ba::parse( lexer&amp; source, parsetree&amp; dest )
{
    // source.get_next() -&gt; const ba::token&amp; ba::lexer::get_next()
    // lexer::end ist ein static member vom typ const token
	while ( source.get_next() != lexer::end )
	{
	}
	return dest;
}
</code></pre>
<pre><code class="language-cpp">inline bool operator==( const token&amp; tok ) const;
inline bool operator!=( const token&amp; tok ) const;
</code></pre>
<blockquote>
<p>-------------- Build: debug in core ---------------</p>
<p>Compiling: parser.cpp<br />
/home/wyfrn/projects/studium/ba2/core/parser.cpp: In function »ba::parsetree&amp; ba::parse(ba::lexer&amp;, ba::parsetree&amp;)«:<br />
/home/wyfrn/projects/studium/ba2/core/parser.cpp:7: Fehler: no match für »operator!=« in »((ba::lexer*)source)-&gt;ba::lexer::get_next() != ba::lexer::end«<br />
/home/wyfrn/projects/studium/ba2/core/token.hpp:96: Anmerkung: Kandidaten sind: bool ba::token::operator!=(const ba::token&amp;) const<br />
Process terminated with status 1 (0 minutes, 1 seconds)<br />
2 errors, 0 warnings</p>
</blockquote>
<p>Insbesondere die zweite Zeile der Fehlermeldung kann ich grad garnicht nachvollziehen. Fällt jemandem etwas auf oder habt ihr vlt Tipps / Hinweise den Fehler einzugrenzen! Schonmal ein Danke im Voraus!</p>
</blockquote>
<p>Ich kann nur vermuten... Wenn du das Problem einfach lösen willst, dann schreibe dir eine Funktion has_next().</p>
<pre><code class="language-cpp">while (lexer.has_next())
{
 token t = lexer.get_next();
}
</code></pre>
<p>Für eine direkte Lösung deines Problems ist aber nicht wirklich genug Code vorhanden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1754216</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1754216</guid><dc:creator><![CDATA[BBBB]]></dc:creator><pubDate>Sun, 02 Aug 2009 19:43:48 GMT</pubDate></item><item><title><![CDATA[Reply to Fehlersuche: Problem beim Aufruf von operator!= on Sun, 02 Aug 2009 20:12:07 GMT]]></title><description><![CDATA[<p>Danke schonmal für dein Bemühen. Ich versuche immer so wenig wie möglich Code zu posten, weils meistens ehr abschreckend auf die Leser wirkt.<br />
Allerdings konnte ich das Problem eingrenzen. Die Ursache wird in folgendem Beispiel deutlich:</p>
<pre><code class="language-cpp">typedef enum
{
	foo2,
	foo4
} foo_t;

struct bar
{
	explicit bar( const foo_t ft )
			: m_ft( ft )
	{
	}

	foo_t m_ft;
};

struct test
{
	static const bar my_bar( foo_t( foo2 ) );
};

void do_something( const bar&amp; );

int main()
{
	do_something( test::my_bar );

	return 0;
}

void do_something( const test&amp; )
{
}
</code></pre>
<blockquote>
<p>-------------- Build: debug in cnf ---------------</p>
<p>Compiling: main.cpp<br />
/home/wyfrn/projects/studium/ba2/cnf/main.cpp: In function »int main()«:<br />
/home/wyfrn/projects/studium/ba2/cnf/main.cpp:32: Fehler: ungültige Initialisierung einer Referenz des Typs »const bar&amp;« von Ausdruck des Typs »const bar (*)(foo_t)«<br />
/home/wyfrn/projects/studium/ba2/cnf/main.cpp:28: Fehler: bei Übergabe des Arguments 1 von »void do_something(const bar&amp;)«<br />
Process terminated with status 1 (0 minutes, 1 seconds)<br />
2 errors, 0 warnings</p>
</blockquote>
<p>Das Problem is die Umwandlung von test::my_bar in const bar&amp;. Wenn ich weiß, wie ich das hier hinbekomme, läuft auch der andere Code.</p>
<p>Was mit beim testen noch aufgefallen ist:</p>
<pre><code class="language-cpp">typedef enum
{
	foo2,
	foo4
} foo_t;

struct bar
{
	explicit bar( const foo_t ft )
			: m_ft( ft )
	{
	}

	foo_t m_ft;
};

struct test
{
	static const bar my_bar( foo2 );
};

void do_something( const bar&amp; );

int main()
{
	do_something( test::my_bar );

	return 0;
}

void do_something( const test&amp; )
{
}
</code></pre>
<p>Wenn ich den static member auf diese Weise initialisiere, meldet der Compilier folgendes:</p>
<blockquote>
<p>-------------- Build: debug in cnf ---------------</p>
<p>Compiling: main.cpp<br />
/home/wyfrn/projects/studium/ba2/cnf/main.cpp:25: Fehler: »foo2« is not a type<br />
/home/wyfrn/projects/studium/ba2/cnf/main.cpp: In function »int main()«:<br />
/home/wyfrn/projects/studium/ba2/cnf/main.cpp:32: Fehler: ungültige Initialisierung einer Referenz des Typs »const bar&amp;« von Ausdruck des Typs »const bar (*)(int)«<br />
/home/wyfrn/projects/studium/ba2/cnf/main.cpp:28: Fehler: bei Übergabe des Arguments 1 von »void do_something(const bar&amp;)«<br />
Process terminated with status 1 (0 minutes, 1 seconds)<br />
3 errors, 0 warnings</p>
</blockquote>
<p>Die Meldung für Zeile 25 kann ich nicht nachvollziehen. Vieleicht kann mich da jemand aufklären?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1754224</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1754224</guid><dc:creator><![CDATA[quarx]]></dc:creator><pubDate>Sun, 02 Aug 2009 20:12:07 GMT</pubDate></item><item><title><![CDATA[Reply to Fehlersuche: Problem beim Aufruf von operator!= on Sun, 02 Aug 2009 20:19:03 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>man kann nur einfache Datentypen wie &quot;int&quot;, &quot;float&quot; usw bei static const Membern in der Deklaration der Klasse zuweisen. Sollte also so sein:</p>
<pre><code class="language-cpp">struct test
{
    // Deklaration
    static const bar my_bar;
};

// Definition
const bar test::my_bar = foo_t( foo2 );
</code></pre>
<p>Ansonsten sieht auch der Code in deinem Eingangspost für mich korrekt aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1754225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1754225</guid><dc:creator><![CDATA[Badestrand_off]]></dc:creator><pubDate>Sun, 02 Aug 2009 20:19:03 GMT</pubDate></item><item><title><![CDATA[Reply to Fehlersuche: Problem beim Aufruf von operator!= on Sun, 02 Aug 2009 20:31:02 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">enum foo_t
{
    foo2,
    foo4
};

struct bar
{
    explicit bar( const foo_t ft )
            : m_ft( ft )
    {
    }

    foo_t m_ft;
};

struct test
{
	static const bar my_bar;
};

const bar test::my_bar(foo2); // Initialisierung

void do_something( bar a ); // Kein &amp; mehr

int main()
{
    do_something( test::my_bar );

    return 0;
}

void do_something( bar a ) // Kein &amp; mehr
{
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1754235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1754235</guid><dc:creator><![CDATA[asdasdasd]]></dc:creator><pubDate>Sun, 02 Aug 2009 20:31:02 GMT</pubDate></item><item><title><![CDATA[Reply to Fehlersuche: Problem beim Aufruf von operator!= on Sun, 02 Aug 2009 20:33:02 GMT]]></title><description><![CDATA[<p>Besten Dank, es funktioniert. Wenn ich mir jetzt nochmal die Fehlermeldung anschau, dann fällt mir auch auf, dass meine vermeintliche Initialisierung als Funktionsdeklaration aufgefasst wird oO</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1754237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1754237</guid><dc:creator><![CDATA[quarx]]></dc:creator><pubDate>Sun, 02 Aug 2009 20:33:02 GMT</pubDate></item><item><title><![CDATA[Reply to Fehlersuche: Problem beim Aufruf von operator!= on Sun, 02 Aug 2009 20:35:24 GMT]]></title><description><![CDATA[<p>[quote=asdasdasd]Im Originalcode muss es aber zwingend eine Referenz sein.[/quote]</p>
<p>So läufts:</p>
<pre><code class="language-cpp">typedef enum
{
	foo2,
	foo4
} foo_t;

struct bar
{
	bar( const foo_t ft )
			: m_ft( ft )
	{
	}

	foo_t m_ft;
};

struct test
{
	static bar my_bar;
};

bar test::my_bar = foo2;

void do_something( const bar&amp; );

int main()
{
	do_something( test::my_bar );

	return 0;
}

void do_something( const bar&amp; )
{
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1754238</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1754238</guid><dc:creator><![CDATA[quarx]]></dc:creator><pubDate>Sun, 02 Aug 2009 20:35:24 GMT</pubDate></item></channel></rss>