<?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[Vorwärtsdeklaration]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich mache in der Regel lieber eine Vorwärtsdeklaration als den kompletten Header<br />
der Datei zu includieren (Ausnahme: Standard-Bibliothek). Ich verwende<br />
allerdings auch selten typedef.<br />
Jetzt hab ich einen Typen der folgendermaßen deklariert ist:</p>
<p>myheader.h</p>
<pre><code class="language-cpp">typedef std::vector&lt;MyClass*&gt; MyList;
</code></pre>
<p>In einer Methode will ich dann eine Referenz auf ein solches Objekt als Parameter<br />
haben:</p>
<pre><code class="language-cpp">class Foo {
// class MyList;
void method(MyList&amp; list);
}
</code></pre>
<p>Die angedeutete Vorwärtsdeklaration funct allerdings nicht:<br />
'struct MyList' has a previous declaration as `struct MyList'</p>
<p>Wie krieg ich sowas hin (ohne den Header zu inkludieren bzw. den typedef in<br />
der Datei zu machen)?</p>
<p>Wie kann ich eigentlich eine Vorwärtsdeklaration für einen std::vector<br />
machen?</p>
<p>Ich möchte nämlich später ne eigene Implementierung von MyList machen und<br />
dann will ich nicht alles ändern.</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/182525/vorwärtsdeklaration</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 22:33:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/182525.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 26 May 2007 00:57:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vorwärtsdeklaration on Sat, 26 May 2007 00:57:28 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich mache in der Regel lieber eine Vorwärtsdeklaration als den kompletten Header<br />
der Datei zu includieren (Ausnahme: Standard-Bibliothek). Ich verwende<br />
allerdings auch selten typedef.<br />
Jetzt hab ich einen Typen der folgendermaßen deklariert ist:</p>
<p>myheader.h</p>
<pre><code class="language-cpp">typedef std::vector&lt;MyClass*&gt; MyList;
</code></pre>
<p>In einer Methode will ich dann eine Referenz auf ein solches Objekt als Parameter<br />
haben:</p>
<pre><code class="language-cpp">class Foo {
// class MyList;
void method(MyList&amp; list);
}
</code></pre>
<p>Die angedeutete Vorwärtsdeklaration funct allerdings nicht:<br />
'struct MyList' has a previous declaration as `struct MyList'</p>
<p>Wie krieg ich sowas hin (ohne den Header zu inkludieren bzw. den typedef in<br />
der Datei zu machen)?</p>
<p>Wie kann ich eigentlich eine Vorwärtsdeklaration für einen std::vector<br />
machen?</p>
<p>Ich möchte nämlich später ne eigene Implementierung von MyList machen und<br />
dann will ich nicht alles ändern.</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1292503</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1292503</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 26 May 2007 00:57:28 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Sat, 26 May 2007 07:53:31 GMT]]></title><description><![CDATA[<p>Wenn die Kommentarzeichen // entfallen und noch die Klasse mit einem Semikolon abgeschlossen wird, ist das Programm so korrekt. D.h. der Ausschnitt ist wohl zu klein, um die Ursache des Fehlers sehen zu können. Ein Hinweis ist auch die Fehlermeldung, denn bei der Vorwärtsdeklaration muss eine vorherige Deklaration nicht sichtbar sein, man sieht sie im Beispiel auch nicht, aber der Compiler sieht sie,d.h. das Beispiel ist offensichtlich zu stark verkürzt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1292550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1292550</guid><dc:creator><![CDATA[Helpie]]></dc:creator><pubDate>Sat, 26 May 2007 07:53:31 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Sat, 26 May 2007 09:40:32 GMT]]></title><description><![CDATA[<p>Soweit ich weiß, ist es eine schlechte Idee, typedefs vorwärts zu deklarieren. Den Grund weiß ich nicht mehr... habe ich aber mal in einem Buch gelesen.<br />
Haste mal inkludiert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1292578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1292578</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Sat, 26 May 2007 09:40:32 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Sat, 26 May 2007 09:53:05 GMT]]></title><description><![CDATA[<p>Ein typedef ist bereits nur eine Deklaration. Es ist nicht möglich, den typedef Namen auf einem anderen Weg einzuführen (insbesondere nicht etwas der Art struct MyList). Eine Möglichkeit wäre es, analog zu &lt;ios_fwd&gt;, den Header, der eigentlich für die Deklaration von MyList zuständig ist, durch einen Header, der nur Deklarationen enthält, zu ergänzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1292584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1292584</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 26 May 2007 09:53:05 GMT</pubDate></item><item><title><![CDATA[Reply to Vorwärtsdeklaration on Sat, 26 May 2007 11:52:38 GMT]]></title><description><![CDATA[<p>Vielen Dank für eure Antworten!</p>
<p>@Helpie: Das Semikolon war natürlich (hier) nen Flüchtigkeitsfehler und die<br />
Vorwärtsdeklaration sollte auch vor der Klasse sein ^^<br />
Naja, war halt schon spät <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
<p>wegen des zu kleinen Code-Ausschnitts, poste ich mal ein komplett nicht<br />
lauffähiges Programm:</p>
<p>main.cpp:</p>
<pre><code class="language-cpp">#include &quot;Foo.h&quot;
#include &quot;MyList.h&quot;

int main(void){
	Foo foo;
	MyList list;
	foo.method(list);
	return 1;
}
</code></pre>
<p>MyList.h:</p>
<pre><code class="language-cpp">#include &lt;vector&gt;

class MyClass;

typedef std::vector&lt;MyClass*&gt; MyList;
</code></pre>
<p>MyClass.h:</p>
<pre><code class="language-cpp">class MyClass{
};
</code></pre>
<p>Foo.h:</p>
<pre><code class="language-cpp">class MyList;
//#include &quot;MyList.h&quot;

class Foo {
public:
void method(MyList&amp; list);
};
</code></pre>
<p>Foo.cpp:</p>
<pre><code class="language-cpp">#include &quot;Foo.h&quot;
#include &quot;MyList.h&quot;
#include &quot;MyClass.h&quot;

void Foo::method(MyList&amp; list){
	 list.push_back(new MyClass());
}
</code></pre>
<p>Fehlermeldung:</p>
<blockquote>
<p>2 D:\Projekte\Cpp\Test\main.cpp In file included from main.cpp<br />
5 D:\Projekte\Cpp\Test\MyList.h conflicting declaration 'typedef class std::vector&lt;MyClass*, std::allocator&lt;MyClass*&gt; &gt; MyList'<br />
2 D:\Projekte\Cpp\Test\Foo.h 'struct MyList' has a previous declaration as <code>struct MyList' D:\\Projekte\\Cpp\\Test\\main.cpp In function</code>int main()':<br />
8 D:\Projekte\Cpp\Test\main.cpp no matching function for call to `Foo::method(MyList&amp;)'<br />
note D:\Projekte\Cpp\Test\Foo.h:7 candidates are: void Foo::method(MyList&amp;)<br />
D:\Projekte\Cpp\Test\Makefile.win [Build Error] [main.o] Error 1</p>
</blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1463">@Artchi</a>: Danke für den Hinweis, dass es nicht empfehlenswert ist.<br />
Jupp, mit Inkludierung funct es (Hatte ich auch schon probiert)</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@Camper</a>: Die Idee mit dem Header, der nur die notwendigsten Deklarationen<br />
enthält, finde ich gut</p>
<p>Gruß,<br />
CSpille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1292626</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1292626</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 26 May 2007 11:52:38 GMT</pubDate></item></channel></rss>