<?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[Klassen in Namespaces]]></title><description><![CDATA[<p>Hi, irgendwie komme ich grade nicht voran und mir fällt nix mehr zum Testen ein.</p>
<p>Folgendes Problem: Ich verwende Namespaces und schachtele die auch.<br />
Darin deklariere ich Klassen, eine Klasse hat eine statische Funktion, die ich als Callback-Funktion nutzen möchte. Die Klasse wird in einer Header-Datei deklariert und die Funktionen in .cpp definiert:</p>
<p>bla.h</p>
<pre><code class="language-cpp">namespace A
{
  namespace B
  {
    class MainView
    {
    public:
      static void OpenFile( void );
    };
  }
}
</code></pre>
<p>bla.cpp</p>
<pre><code class="language-cpp">#include &quot;bla.h&quot;
namespace A
{
  namespace B
  {
    void MainView::OpenFile( void )
    { /* Do something */ }
  }
}
</code></pre>
<p>Das funktioniert soweit auch immer wunderbar.</p>
<p>Nun kommt mein Callback auf diese Funktion:</p>
<p>DataViewer.cpp</p>
<pre><code class="language-cpp">#include &quot;bla.h&quot;

namespace A
{
  namespace B
  {
    /* STERNCHEN */
    CallBackFunction cbf = MainView::OpenFile; 
  }
}
</code></pre>
<p>Klappt nicht.</p>
<p>Packe ich die Klassendeklaration und die Definition der Funktion aus bla.cpp bei STERNCHEN rein, wird das ganze problemlos kompiliert und ausgeführt.</p>
<p>Es gibt zwei Fehlermeldungen:<br />
[..]dataviewer.cpp:22: error: 'MainView' has not been declared<br />
[..]dataviewer.cpp:22: error: 'OpenFile' was not declared in this scope</p>
<p>Die Headerdatei bla.h wird gefunden.<br />
Jedenfalls meckert er, wenn etwas syntaktisch falsches drin steht.</p>
<p>Übersehe ich irgendwas, habe ich bei den Namespaces was falsch verstanden!?</p>
<p>Benutzter Compiler: g++ (GCC) 4.0.3 20060104 (prerelease) (Debian 4.0.2-6)</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/133285/klassen-in-namespaces</link><generator>RSS for Node</generator><lastBuildDate>Thu, 27 Aug 2026 20:33:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/133285.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 16 Jan 2006 16:08:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klassen in Namespaces on Mon, 16 Jan 2006 16:08:01 GMT]]></title><description><![CDATA[<p>Hi, irgendwie komme ich grade nicht voran und mir fällt nix mehr zum Testen ein.</p>
<p>Folgendes Problem: Ich verwende Namespaces und schachtele die auch.<br />
Darin deklariere ich Klassen, eine Klasse hat eine statische Funktion, die ich als Callback-Funktion nutzen möchte. Die Klasse wird in einer Header-Datei deklariert und die Funktionen in .cpp definiert:</p>
<p>bla.h</p>
<pre><code class="language-cpp">namespace A
{
  namespace B
  {
    class MainView
    {
    public:
      static void OpenFile( void );
    };
  }
}
</code></pre>
<p>bla.cpp</p>
<pre><code class="language-cpp">#include &quot;bla.h&quot;
namespace A
{
  namespace B
  {
    void MainView::OpenFile( void )
    { /* Do something */ }
  }
}
</code></pre>
<p>Das funktioniert soweit auch immer wunderbar.</p>
<p>Nun kommt mein Callback auf diese Funktion:</p>
<p>DataViewer.cpp</p>
<pre><code class="language-cpp">#include &quot;bla.h&quot;

namespace A
{
  namespace B
  {
    /* STERNCHEN */
    CallBackFunction cbf = MainView::OpenFile; 
  }
}
</code></pre>
<p>Klappt nicht.</p>
<p>Packe ich die Klassendeklaration und die Definition der Funktion aus bla.cpp bei STERNCHEN rein, wird das ganze problemlos kompiliert und ausgeführt.</p>
<p>Es gibt zwei Fehlermeldungen:<br />
[..]dataviewer.cpp:22: error: 'MainView' has not been declared<br />
[..]dataviewer.cpp:22: error: 'OpenFile' was not declared in this scope</p>
<p>Die Headerdatei bla.h wird gefunden.<br />
Jedenfalls meckert er, wenn etwas syntaktisch falsches drin steht.</p>
<p>Übersehe ich irgendwas, habe ich bei den Namespaces was falsch verstanden!?</p>
<p>Benutzter Compiler: g++ (GCC) 4.0.3 20060104 (prerelease) (Debian 4.0.2-6)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/968197</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/968197</guid><dc:creator><![CDATA[Xin]]></dc:creator><pubDate>Mon, 16 Jan 2006 16:08:01 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen in Namespaces on Mon, 16 Jan 2006 16:46:34 GMT]]></title><description><![CDATA[<p>Ich habe die Funktion nun verschoben und somit zwei Klassen zusammengelegt, so dass die Funktion nun wieder in der selben Datei auftaucht, wie die Zuweisung der Callback-Funktion. Zack, schon funktioniert's wieder. :-\</p>
<p>Das bringt mich auf eine neue Frage (die ich mangels Google-tauglicher Umschreibung hier stelle; ich habe leider auch keine brauchbare C++ Literatur hier):</p>
<p>Darf ich einen Namensraum nur einmalig öffnen und beschreiben, also in einer (1,0) Headerdateien und in einer CPP-Datei und werden Erweiterungen des Namendurch andere Dateien vom Compiler (ohne Fehlermeldung) ignoriert?!?</p>
<p>Danke für evtl. Antworten!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/968222</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/968222</guid><dc:creator><![CDATA[Xin]]></dc:creator><pubDate>Mon, 16 Jan 2006 16:46:34 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen in Namespaces on Mon, 16 Jan 2006 17:14:12 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Xin schrieb:</p>
<blockquote>
<p>Darf ich einen Namensraum nur einmalig öffnen und beschreiben, also in einer (1,0) Headerdateien und in einer CPP-Datei und werden Erweiterungen des Namendurch andere Dateien vom Compiler (ohne Fehlermeldung) ignoriert?!?</p>
</blockquote>
<p>Namensräume kannst du so oft auf - und zumachen wie du willst. Und eigentlich sollte der Compiler die Erweiterungen (in der entsprechenden Datei) kennen.</p>
<p>Mfg</p>
<p>GPC</p>
]]></description><link>https://www.c-plusplus.net/forum/post/968235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/968235</guid><dc:creator><![CDATA[GPC]]></dc:creator><pubDate>Mon, 16 Jan 2006 17:14:12 GMT</pubDate></item><item><title><![CDATA[Reply to Klassen in Namespaces on Mon, 16 Jan 2006 17:21:58 GMT]]></title><description><![CDATA[<p>GPC schrieb:</p>
<blockquote>
<p>Hallo,</p>
<p>Namensräume kannst du so oft auf - und zumachen wie du willst. Und eigentlich sollte der Compiler die Erweiterungen (in der entsprechenden Datei) kennen.</p>
</blockquote>
<p>Zuerst einmal danke für die Bestätigung, war ich doch nicht ganz so unfähig.</p>
<p>Ansonsten bin ich immer noch offen für mögliche Ideen, um das Problem eleganter zu lösen, vielleicht sieht ja doch jemand einen Fehler in meiner Herangehensweise und sieht sich in der Lage, mich zu korrigieren? &lt;hoff&gt;.</p>
<p>Ich vermute, die Frage, ob hier ein Compilerfehler vorliegt, wird wohl unbeantwortet bleiben. :-\</p>
]]></description><link>https://www.c-plusplus.net/forum/post/968242</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/968242</guid><dc:creator><![CDATA[Xin]]></dc:creator><pubDate>Mon, 16 Jan 2006 17:21:58 GMT</pubDate></item></channel></rss>