<?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[Probleme mit Aufruf von static Methode ausserhalb von Klassen]]></title><description><![CDATA[<p>Hi,</p>
<p>hier kommt etwas Code, bei dem ich beim compilieren (mit VC8) Fehler bekomme:</p>
<pre><code class="language-cpp">//~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Loader.h
//~~~~~~~~~~~~~~~~~~~~~~~~~~~

#include &quot;Xyz.h&quot;

// Abstract loader interface
class Loader
{
public:
    virtual Xyz Load(const std::string&amp; filePath) = 0;
};

// Singleton class
class LoaderMap
{
public:
    static LoaderMap* Instance();

    void RegisterLoader(Loader* loader, const std::string&amp; id);

    Loader* GetLoader(const std::string&amp; id);

private:

    LoaderMap();    // Hidden standard constructor

    std::map&lt;std::string, Loader*&gt; m_map;

    static LoaderMap* _instance;
};

//~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Loader.cpp
//~~~~~~~~~~~~~~~~~~~~~~~~~~~

LoaderMap* LoaderMap::_instance = NULL;

LoaderMap* LoaderMap::Instance()
{
    if(_instance == NULL)
    {
        _instance = new LoaderMap();
    }
    return _instance;
}

void LoaderMap::RegisterLoader(Loader* loader, const std::string&amp; id)
{
    m_map[id] = loader;
}

Loader* LoaderMap::GetLoader(const std::string&amp; id)
{
    return m_map[id];
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ConcreteLoader.h
//~~~~~~~~~~~~~~~~~~~~~~~~~~~

#include &quot;Loader.h&quot;

class ConcreteLoader : public Loader
{
public:
    virtual Xyz Load(const std::string&amp; filePath); 
};

//~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ConcreteLoader.cpp
//~~~~~~~~~~~~~~~~~~~~~~~~~~~

LoaderMap::Instance()-&gt;RegisterLoader(new ConcreteLoader(), &quot;CONCRETE_LOADER&quot;);

void Xyz ConcreteLoader::Load(const std::string&amp; fileath)
{
    // ...
}
</code></pre>
<p>Ich hoffe, ich habe keine Fehler gemacht (habe meinen eigentlich Code vereinfacht und blind neu getippt).</p>
<p>Die Zeile</p>
<pre><code class="language-cpp">LoaderMap::Instance()-&gt;RegisterLoader(new ConcreteLoader(), &quot;CONCRETE_LOADER&quot;);
</code></pre>
<p>will jedenfalls nicht kompilieren. Ich bekomme die Fehler</p>
<p>error C2143: syntax error : missing ';' before '-&gt;'<br />
error C2761: 'LoaderMap *LoaderMap::Instance(void)' : member function redeclaration not allowed</p>
<p>Offensichtlich denkt der Compiler, dass ich die Instance() Methode nochmal deklarieren will. Will ich aber gar nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Ich habe weder Ahnung, warum ich diese Fehler bekomme, noch (was viel schlimmer ist), was ich anders machen kann. Und daher wäre ich sehr sehr dankbar, wenn jemand einen Tipp hätte.</p>
<p>Danke,<br />
Felix</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/184071/probleme-mit-aufruf-von-static-methode-ausserhalb-von-klassen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 14:27:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/184071.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 12 Jun 2007 05:16:16 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Probleme mit Aufruf von static Methode ausserhalb von Klassen on Tue, 12 Jun 2007 05:16:16 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>hier kommt etwas Code, bei dem ich beim compilieren (mit VC8) Fehler bekomme:</p>
<pre><code class="language-cpp">//~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Loader.h
//~~~~~~~~~~~~~~~~~~~~~~~~~~~

#include &quot;Xyz.h&quot;

// Abstract loader interface
class Loader
{
public:
    virtual Xyz Load(const std::string&amp; filePath) = 0;
};

// Singleton class
class LoaderMap
{
public:
    static LoaderMap* Instance();

    void RegisterLoader(Loader* loader, const std::string&amp; id);

    Loader* GetLoader(const std::string&amp; id);

private:

    LoaderMap();    // Hidden standard constructor

    std::map&lt;std::string, Loader*&gt; m_map;

    static LoaderMap* _instance;
};

//~~~~~~~~~~~~~~~~~~~~~~~~~~~
// Loader.cpp
//~~~~~~~~~~~~~~~~~~~~~~~~~~~

LoaderMap* LoaderMap::_instance = NULL;

LoaderMap* LoaderMap::Instance()
{
    if(_instance == NULL)
    {
        _instance = new LoaderMap();
    }
    return _instance;
}

void LoaderMap::RegisterLoader(Loader* loader, const std::string&amp; id)
{
    m_map[id] = loader;
}

Loader* LoaderMap::GetLoader(const std::string&amp; id)
{
    return m_map[id];
}

//~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ConcreteLoader.h
//~~~~~~~~~~~~~~~~~~~~~~~~~~~

#include &quot;Loader.h&quot;

class ConcreteLoader : public Loader
{
public:
    virtual Xyz Load(const std::string&amp; filePath); 
};

//~~~~~~~~~~~~~~~~~~~~~~~~~~~
// ConcreteLoader.cpp
//~~~~~~~~~~~~~~~~~~~~~~~~~~~

LoaderMap::Instance()-&gt;RegisterLoader(new ConcreteLoader(), &quot;CONCRETE_LOADER&quot;);

void Xyz ConcreteLoader::Load(const std::string&amp; fileath)
{
    // ...
}
</code></pre>
<p>Ich hoffe, ich habe keine Fehler gemacht (habe meinen eigentlich Code vereinfacht und blind neu getippt).</p>
<p>Die Zeile</p>
<pre><code class="language-cpp">LoaderMap::Instance()-&gt;RegisterLoader(new ConcreteLoader(), &quot;CONCRETE_LOADER&quot;);
</code></pre>
<p>will jedenfalls nicht kompilieren. Ich bekomme die Fehler</p>
<p>error C2143: syntax error : missing ';' before '-&gt;'<br />
error C2761: 'LoaderMap *LoaderMap::Instance(void)' : member function redeclaration not allowed</p>
<p>Offensichtlich denkt der Compiler, dass ich die Instance() Methode nochmal deklarieren will. Will ich aber gar nicht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Ich habe weder Ahnung, warum ich diese Fehler bekomme, noch (was viel schlimmer ist), was ich anders machen kann. Und daher wäre ich sehr sehr dankbar, wenn jemand einen Tipp hätte.</p>
<p>Danke,<br />
Felix</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1303669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1303669</guid><dc:creator><![CDATA[FelixManke]]></dc:creator><pubDate>Tue, 12 Jun 2007 05:16:16 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Aufruf von static Methode ausserhalb von Klassen on Tue, 12 Jun 2007 05:25:03 GMT]]></title><description><![CDATA[<p>LoaderMap::Instance()-&gt;RegisterLoader(new ConcreteLoader(), &quot;CONCRETE_LOADER&quot;); ist eine Anweisung und diese Muss in einer Methode oder Funktions stehen. Du kannst eine Anweisung nicht einfach so mitten in den Quellcode packen, weil der Compiler dann nicht wissen kann, wann die Anweisung ausgeführt werden soll...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1303672</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1303672</guid><dc:creator><![CDATA[Vertexwahn]]></dc:creator><pubDate>Tue, 12 Jun 2007 05:25:03 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Aufruf von static Methode ausserhalb von Klassen on Tue, 12 Jun 2007 05:30:40 GMT]]></title><description><![CDATA[<p>Ok, aber wie macht man sowas dann am besten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1303673</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1303673</guid><dc:creator><![CDATA[FelixManke]]></dc:creator><pubDate>Tue, 12 Jun 2007 05:30:40 GMT</pubDate></item><item><title><![CDATA[Reply to Probleme mit Aufruf von static Methode ausserhalb von Klassen on Tue, 12 Jun 2007 05:46:05 GMT]]></title><description><![CDATA[<p>FelixManke schrieb:</p>
<blockquote>
<p>Ok, aber wie macht man sowas dann am besten?</p>
</blockquote>
<p>Das kommt drauf an, <em>wann das ausgeführt werden soll</em>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1303674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1303674</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Tue, 12 Jun 2007 05:46:05 GMT</pubDate></item></channel></rss>