<?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[Vererbungsfrage]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe ein Problem bei einer Verbungskonstellation mit einer abstrakten Klasse, und sehe gerade den Wald vor lauter Bäumen nicht.</p>
<p>Ich habe einen Klasse T:</p>
<pre><code class="language-cpp">namespace qep {

    class T {
    public:

        virtual ~T();
        virtual C* createQEP(ast::AST* ast) = 0;
    protected:
        T(mm::MM mem);
        C* createQEP(ast::ASTExpression* ex, ast::ASTFor* forClause);
}//End class
}//End namespace
</code></pre>
<p>Es sei C* createQEP(ast::ASTExpression* ex, ast::ASTFor* forClause); in <a href="http://T.cc" rel="nofollow">T.cc</a> implementiert. Weiter habe ich eine Klasse RT:</p>
<pre><code class="language-cpp">#include &quot;T.h&quot;

namespace qep {

    class RT : virtual public T {
    public:
        RT(mm::MM* mem);
        ~RT();
}//End class
}//End namespace
</code></pre>
<p>Diese wird implementiert in <a href="http://RT.cc" rel="nofollow">RT.cc</a>:</p>
<pre><code class="language-cpp">#include &quot;RT.h&quot;

namespace qep {
    RT::~RRT(){
    }//End 

    RT::RT(mm::MM* mem) : T(mem) {
    }//End 

    C* RT::createQEP(AST* ast){

        C* prodOp = this-&gt;createQEP(ast-&gt;getWhereClause(),
                                         ast-&gt;getForClause());

        return new C(ast-&gt;getSelectClause(), prodOp, mem);

    }//End createQEP
}//End namespace
</code></pre>
<p>Nun bekomme ich folgenden Fehler:</p>
<pre><code>source/qep/RT.cpp:43: Fehler: keine Elementfunktion »qep::C* qep::RT::createQEP(ast::AST*)« in Klasse »qep::RT« deklariert
</code></pre>
<p>Warum??? Meine IDE sagt die Methode ist da, der Compiler ist anderer Meinung. Tips? Schonmal dank.</p>
<p>Uwe</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/240464/vererbungsfrage</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 00:03:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/240464.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 06 May 2009 20:05:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vererbungsfrage on Wed, 06 May 2009 20:05:38 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe ein Problem bei einer Verbungskonstellation mit einer abstrakten Klasse, und sehe gerade den Wald vor lauter Bäumen nicht.</p>
<p>Ich habe einen Klasse T:</p>
<pre><code class="language-cpp">namespace qep {

    class T {
    public:

        virtual ~T();
        virtual C* createQEP(ast::AST* ast) = 0;
    protected:
        T(mm::MM mem);
        C* createQEP(ast::ASTExpression* ex, ast::ASTFor* forClause);
}//End class
}//End namespace
</code></pre>
<p>Es sei C* createQEP(ast::ASTExpression* ex, ast::ASTFor* forClause); in <a href="http://T.cc" rel="nofollow">T.cc</a> implementiert. Weiter habe ich eine Klasse RT:</p>
<pre><code class="language-cpp">#include &quot;T.h&quot;

namespace qep {

    class RT : virtual public T {
    public:
        RT(mm::MM* mem);
        ~RT();
}//End class
}//End namespace
</code></pre>
<p>Diese wird implementiert in <a href="http://RT.cc" rel="nofollow">RT.cc</a>:</p>
<pre><code class="language-cpp">#include &quot;RT.h&quot;

namespace qep {
    RT::~RRT(){
    }//End 

    RT::RT(mm::MM* mem) : T(mem) {
    }//End 

    C* RT::createQEP(AST* ast){

        C* prodOp = this-&gt;createQEP(ast-&gt;getWhereClause(),
                                         ast-&gt;getForClause());

        return new C(ast-&gt;getSelectClause(), prodOp, mem);

    }//End createQEP
}//End namespace
</code></pre>
<p>Nun bekomme ich folgenden Fehler:</p>
<pre><code>source/qep/RT.cpp:43: Fehler: keine Elementfunktion »qep::C* qep::RT::createQEP(ast::AST*)« in Klasse »qep::RT« deklariert
</code></pre>
<p>Warum??? Meine IDE sagt die Methode ist da, der Compiler ist anderer Meinung. Tips? Schonmal dank.</p>
<p>Uwe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1706765</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1706765</guid><dc:creator><![CDATA[uwerothfeld]]></dc:creator><pubDate>Wed, 06 May 2009 20:05:38 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsfrage on Wed, 06 May 2009 20:14:17 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#include &quot;T.h&quot;

namespace qep {

    class RT : virtual public T {
    public:
        RT(mm::MM* mem);
        ~RT();
        C* RT::createQEP(AST* ast);//diese zeile vermisse ich
};//und natürlich dieses semikolon //End class
}//End namespace
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1706768</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1706768</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 06 May 2009 20:14:17 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsfrage on Wed, 06 May 2009 21:25:36 GMT]]></title><description><![CDATA[<p>Hi volkard,</p>
<p>cool danke. Semikolon war natürlich da. Zeile fehlte aber. Mh. Egal, ein Schritt weiter. Nun meckert er aber (Listing <a href="http://RT.cc" rel="nofollow">RT.cc</a>[Zeile 12]):</p>
<pre><code class="language-cpp">source/qep/RT.cpp:47: Fehler: keine passende Funktion für Aufruf von »qep::RT::createQEP(ast::ASTExpression*, ast::ASTFor*)«
source/qep/RT.cpp:43: Anmerkung: Kandidaten sind: virtual qep::QueryCommand* qep::RT::createQEP(ast::AST*)
</code></pre>
<p>Diese Methode habe ich aber in T deklariert und definiert, da sie für alle Unterklassen identisch ist. Noch nen Tipp?</p>
<p>Danke schon mal.</p>
<p>Uwe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1706801</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1706801</guid><dc:creator><![CDATA[uwerothfeld]]></dc:creator><pubDate>Wed, 06 May 2009 21:25:36 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsfrage on Wed, 06 May 2009 21:41:51 GMT]]></title><description><![CDATA[<p>zieh mal die basisklassenmethode in deinen scope rein, damit du unter gleichscopigen funktionen überladung machen kannst, statt im heimatscope den fremden kram nur zu verdecken.</p>
<pre><code class="language-cpp">#include &quot;T.h&quot;

namespace qep {

    class RT : virtual public T {
    public:
        RT(mm::MM* mem);
        ~RT();
        using T::createQEP;
        C* RT::createQEP(AST* ast);
};//End class
}//End namespace
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1706807</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1706807</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 06 May 2009 21:41:51 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsfrage on Wed, 06 May 2009 21:55:15 GMT]]></title><description><![CDATA[<p>Hi volkard,</p>
<p>Zum einen: Was ist dies? Habe ich noch nie gesehen. Warum macht man dies? Und zum andern: Damit bekomme ich den Fehler:</p>
<p>source/qep/T.cpp:490: Fehler: keine Elementfunktion »qep::C* qep::T::creatQEP(ast::ASTExpression*, ast::ASTFor*)« in Klasse »qep::T« deklariert</p>
<p>Das ist die Zeile, in der in der Basisklasse T diese Methode definiert ist. Geht dies Überhaupt in C++? Also nochmal, ich will die Methode createQEP(AST) in den Unterklassen verwenden, aber createQEP(ASTExpression, ASTFor) soll in T definiert sein (da immer das selbe).</p>
<p>Später Gruß und Dank.<br />
Uwe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1706815</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1706815</guid><dc:creator><![CDATA[uwerothfeld]]></dc:creator><pubDate>Wed, 06 May 2009 21:55:15 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsfrage on Wed, 06 May 2009 22:21:45 GMT]]></title><description><![CDATA[<p>uwerothfeld schrieb:</p>
<blockquote>
<p>source/qep/T.cpp:490: Fehler: keine Elementfunktion »qep::C* qep::T::creatQEP(ast::ASTExpression*, ast::ASTFor*)« in Klasse »qep::T« deklariert</p>
</blockquote>
<p>mann, da hab ich lange gesucht, um den fehler bei mir zu reproduzieren.<br />
aber wenn ich creat<strong>e</strong>QEP auch ohne erstes e schreibe, hab ich auch deinen fehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1706824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1706824</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 06 May 2009 22:21:45 GMT</pubDate></item><item><title><![CDATA[Reply to Vererbungsfrage on Thu, 07 May 2009 07:46:53 GMT]]></title><description><![CDATA[<p>Oh man, vorlkard, peinlich peinlich für mich! Dabei sagt er ja sogar was falsch ist. Mh... Danke. Ich bin sehr sehr begeistert. Vielen Dank.</p>
<p>Uwe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1706907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1706907</guid><dc:creator><![CDATA[uwerothfeld_]]></dc:creator><pubDate>Thu, 07 May 2009 07:46:53 GMT</pubDate></item></channel></rss>