<?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 initialization of reference]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe eine Klassenhierarchie, in der jede abgeleitete Klasse eine Variable von einem bestimmten Typ enthält. Diese Typen haben eine gleichartige Klassenhierarchie. Das sieht etwa so aus:</p>
<pre><code class="language-cpp">struct AA {};
struct BB : public AA {};
struct CC : public AA {};

class A {
        public:
        virtual AA&amp; getAA() = 0;
};

class B : public A {
        BB bb;
        public:
        AA&amp; getAA() { return bb; }
};

class C : public A {
        CC cc;
        vector&lt;CC&gt; ccs;
        public:
        AA&amp; getAA() { return cc; };
};
</code></pre>
<p>Soweit so gut. Leider enthalten die Klassen aber auch noch Vektoren, mit denen ich ähnlich verfahren wollte:</p>
<pre><code class="language-cpp">class A {
        public:
        virtual AA&amp; getAA() = 0;
        virtual vector&lt;AA&gt;&amp; getAAs() = 0;
};

class B : public A {
        BB bb;
        vector&lt;BB&gt; bbs;
        public:
        AA&amp; getAA() { return bb; }
        vector&lt;AA&gt;&amp; getAAs() { return bbs; } // error!
};

class C : public A {
        CC cc;
        vector&lt;CC&gt; ccs;
        public:
        AA&amp; getAA() { return cc; };
        vector&lt;AA&gt;&amp; getAAs() {return ccs; }; // error!
};
</code></pre>
<p>Der g++ Compiler antwortet mir:</p>
<pre><code>invalid initialization of reference of type 'std::vector&lt;A, std::allocator&lt;A&gt; &gt;&amp;' from expression of type 'std::vector&lt;A, std::allocator&lt;A&gt; &gt;'
</code></pre>
<p>Kennt jemand eine gute Lösung (ohne Pointer) hierfür?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/272265/invalid-initialization-of-reference</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 00:09:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/272265.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 13 Aug 2010 16:29:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to invalid initialization of reference on Fri, 13 Aug 2010 16:29:41 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe eine Klassenhierarchie, in der jede abgeleitete Klasse eine Variable von einem bestimmten Typ enthält. Diese Typen haben eine gleichartige Klassenhierarchie. Das sieht etwa so aus:</p>
<pre><code class="language-cpp">struct AA {};
struct BB : public AA {};
struct CC : public AA {};

class A {
        public:
        virtual AA&amp; getAA() = 0;
};

class B : public A {
        BB bb;
        public:
        AA&amp; getAA() { return bb; }
};

class C : public A {
        CC cc;
        vector&lt;CC&gt; ccs;
        public:
        AA&amp; getAA() { return cc; };
};
</code></pre>
<p>Soweit so gut. Leider enthalten die Klassen aber auch noch Vektoren, mit denen ich ähnlich verfahren wollte:</p>
<pre><code class="language-cpp">class A {
        public:
        virtual AA&amp; getAA() = 0;
        virtual vector&lt;AA&gt;&amp; getAAs() = 0;
};

class B : public A {
        BB bb;
        vector&lt;BB&gt; bbs;
        public:
        AA&amp; getAA() { return bb; }
        vector&lt;AA&gt;&amp; getAAs() { return bbs; } // error!
};

class C : public A {
        CC cc;
        vector&lt;CC&gt; ccs;
        public:
        AA&amp; getAA() { return cc; };
        vector&lt;AA&gt;&amp; getAAs() {return ccs; }; // error!
};
</code></pre>
<p>Der g++ Compiler antwortet mir:</p>
<pre><code>invalid initialization of reference of type 'std::vector&lt;A, std::allocator&lt;A&gt; &gt;&amp;' from expression of type 'std::vector&lt;A, std::allocator&lt;A&gt; &gt;'
</code></pre>
<p>Kennt jemand eine gute Lösung (ohne Pointer) hierfür?</p>
<p>Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1939729</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1939729</guid><dc:creator><![CDATA[_katha]]></dc:creator><pubDate>Fri, 13 Aug 2010 16:29:41 GMT</pubDate></item><item><title><![CDATA[Reply to invalid initialization of reference on Fri, 13 Aug 2010 16:50:35 GMT]]></title><description><![CDATA[<p>_katha schrieb:</p>
<blockquote>
<p>Kennt jemand eine gute Lösung (ohne Pointer) hierfür?</p>
</blockquote>
<p>Wenn du keine Pointer magst, kannst du auch Referenzen oder Iteratoren nehmen. Wobei diese natürlich leicht unterschiedliches leisten als ein Pointer. Jedenfalls musst du die Elemente in den vectoren irgendwie indirekt über ihre Basisklasse (AA) speichern.</p>
<p>Mit Zeigern (der übliche Ansatz) sähe das so aus:</p>
<pre><code class="language-cpp">class A {
        public:
        virtual AA&amp; getAA() = 0;
        virtual vector&lt;AA*&gt;&amp; getAAs() = 0;
};

class B : public A {
        BB bb;
        vector&lt;AA*&gt; bbs;
        public:
        AA&amp; getAA() { return bb; }
        vector&lt;AA*&gt;&amp; getAAs() { return bbs; } 
};

class C : public A {
        CC cc;
        vector&lt;AA*&gt; ccs;
        public:
        AA&amp; getAA() { return cc; };
        vector&lt;AA*&gt;&amp; getAAs() {return ccs; }; 
};
</code></pre>
<p>P.S.: Wobei man dann natürlich auch den vector und die get-Funktion in die Klasse A verfrachten kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1939741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1939741</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Fri, 13 Aug 2010 16:50:35 GMT</pubDate></item></channel></rss>