<?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[Basisklasse undefiniert]]></title><description><![CDATA[<p>Hallo,<br />
C++ und Includes ... Wer hat das bloß erfunden <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 bekomme beim kompilieren immer folgende Fehlermeldung:<br />
Kompilieren...<br />
SearchStrategy.cpp<br />
c:\vsdev\VividFormsReader\VividFormsReader*<em>SearchFirst.h</em>*(6) : error C2504: 'SearchStrategy': Basisklasse undefiniert<br />
c:\vsdev\VividFormsReader\VividFormsReader*<em>SearchFirst.h</em>*(10) : error C2061: Syntaxfehler: Bezeichner 'SearchArea'</p>
<p>Die Klassen sind folgendermaßen aufgebaut:</p>
<p>Klasse SearchArea:</p>
<pre><code>#pragma once
#include &quot;comparablearea.h&quot;
#include &quot;InvalidPositionException.h&quot;
#include &lt;boost/shared_ptr.hpp&gt;
#include &quot;searchfirst.h&quot;

class SearchStrategy;

class SearchArea :
	public ComparableArea
{
public:
	SearchArea(int w, int h, int xCoordOrg, int yCoordOrg, unsigned char** searchArea, SearchStrategy *search);
	SearchArea(const SearchArea&amp; rhs);
	virtual ~SearchArea(void);

private:
	int width;
	int height;
	int xCoord;
	int yCoord;
	unsigned char **area;
	SearchStrategy* searchStrategy;

public:
	int getWidth(void) const
	{
		return width;
	}

	int getHeight(void) const
	{
		return height;
	}

	int getXCoord(void) const
	{
		return xCoord;
	}

	int getYCoord(void) const
	{
		return yCoord;
	}

	int getPixel(int xCoord, int yCoord) const;
	SearchArea&amp; operator=(const SearchArea&amp; rhs);
	static boost::shared_ptr&lt;SearchArea&gt; Create(const CEPPosition&amp; pos, const CEPGraphics2D&amp; graphic);

protected:
	void cleanArea(void);
};
</code></pre>
<p>Klasse SearchStrategy:</p>
<pre><code>#pragma once
#include &quot;searchresult.h&quot;
#include &quot;pattern.h&quot;
#include &quot;searcharea.h&quot;

class SearchArea;

class SearchStrategy
{
public:
	SearchStrategy(void);
	virtual ~SearchStrategy(void);
	virtual SearchResult search(SearchArea* searchArea, Pattern* pattern) const = 0;
};
</code></pre>
<p>Klasse SearchFirst:</p>
<pre><code>#pragma once
#include &quot;searchstrategy.h&quot;

class SearchFirst :
	public SearchStrategy
{
public:
	SearchFirst(void);
	virtual ~SearchFirst(void);
	SearchResult search(SearchArea* searchArea, Pattern* pattern) const;
};
</code></pre>
<p>Wer kann mir helfen den Include-WirrWarr zu entfädeln?</p>
<p>Danke im voraus!!!</p>
<p>Gruß,<br />
Chris</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/169737/basisklasse-undefiniert</link><generator>RSS for Node</generator><lastBuildDate>Sat, 04 Apr 2026 16:13:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/169737.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 08 Jan 2007 14:13:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Basisklasse undefiniert on Mon, 08 Jan 2007 14:13:24 GMT]]></title><description><![CDATA[<p>Hallo,<br />
C++ und Includes ... Wer hat das bloß erfunden <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 bekomme beim kompilieren immer folgende Fehlermeldung:<br />
Kompilieren...<br />
SearchStrategy.cpp<br />
c:\vsdev\VividFormsReader\VividFormsReader*<em>SearchFirst.h</em>*(6) : error C2504: 'SearchStrategy': Basisklasse undefiniert<br />
c:\vsdev\VividFormsReader\VividFormsReader*<em>SearchFirst.h</em>*(10) : error C2061: Syntaxfehler: Bezeichner 'SearchArea'</p>
<p>Die Klassen sind folgendermaßen aufgebaut:</p>
<p>Klasse SearchArea:</p>
<pre><code>#pragma once
#include &quot;comparablearea.h&quot;
#include &quot;InvalidPositionException.h&quot;
#include &lt;boost/shared_ptr.hpp&gt;
#include &quot;searchfirst.h&quot;

class SearchStrategy;

class SearchArea :
	public ComparableArea
{
public:
	SearchArea(int w, int h, int xCoordOrg, int yCoordOrg, unsigned char** searchArea, SearchStrategy *search);
	SearchArea(const SearchArea&amp; rhs);
	virtual ~SearchArea(void);

private:
	int width;
	int height;
	int xCoord;
	int yCoord;
	unsigned char **area;
	SearchStrategy* searchStrategy;

public:
	int getWidth(void) const
	{
		return width;
	}

	int getHeight(void) const
	{
		return height;
	}

	int getXCoord(void) const
	{
		return xCoord;
	}

	int getYCoord(void) const
	{
		return yCoord;
	}

	int getPixel(int xCoord, int yCoord) const;
	SearchArea&amp; operator=(const SearchArea&amp; rhs);
	static boost::shared_ptr&lt;SearchArea&gt; Create(const CEPPosition&amp; pos, const CEPGraphics2D&amp; graphic);

protected:
	void cleanArea(void);
};
</code></pre>
<p>Klasse SearchStrategy:</p>
<pre><code>#pragma once
#include &quot;searchresult.h&quot;
#include &quot;pattern.h&quot;
#include &quot;searcharea.h&quot;

class SearchArea;

class SearchStrategy
{
public:
	SearchStrategy(void);
	virtual ~SearchStrategy(void);
	virtual SearchResult search(SearchArea* searchArea, Pattern* pattern) const = 0;
};
</code></pre>
<p>Klasse SearchFirst:</p>
<pre><code>#pragma once
#include &quot;searchstrategy.h&quot;

class SearchFirst :
	public SearchStrategy
{
public:
	SearchFirst(void);
	virtual ~SearchFirst(void);
	SearchResult search(SearchArea* searchArea, Pattern* pattern) const;
};
</code></pre>
<p>Wer kann mir helfen den Include-WirrWarr zu entfädeln?</p>
<p>Danke im voraus!!!</p>
<p>Gruß,<br />
Chris</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1205673</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1205673</guid><dc:creator><![CDATA[HolyGrail]]></dc:creator><pubDate>Mon, 08 Jan 2007 14:13:24 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse undefiniert on Mon, 08 Jan 2007 14:25:32 GMT]]></title><description><![CDATA[<p>Die drei Header bilden einen Include-Kreis: SearchFirst -&gt; SearchStrategy -&gt; SearchArea -&gt; SearchFirst.</p>
<p>Die einzige Direktive, die du wirklich brauchst, ist die von searchstrategy.h in SearchFirst, denn da geht es um eine Basisklasse. Die anderen kannst du einfach in die dazugehörigen .cpp-Dateien verschieben, die Vorwärtsdeklarationen hast du ja schon.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1205686</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1205686</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Mon, 08 Jan 2007 14:25:32 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse undefiniert on Mon, 08 Jan 2007 14:34:22 GMT]]></title><description><![CDATA[<p>Danke MFK! So funktioniert es...</p>
<p>Ich muss mir doch noch einmal die ganze Include-Geschichte verdeutlichen... Hast Du dazu zufällig einen guten Link parat?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1205697</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1205697</guid><dc:creator><![CDATA[HolyGrail]]></dc:creator><pubDate>Mon, 08 Jan 2007 14:34:22 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse undefiniert on Mon, 08 Jan 2007 14:46:57 GMT]]></title><description><![CDATA[<p>so viel gibst da doch eigentlich nicht zu sagen:</p>
<blockquote>
<p>Wir haben &quot;#include&quot; ja bereits kennengelernt - doch was macht der Präprozessor da genau? Er macht eine einfache Textersetzung. Er kopiert den ganzen Inhalt der zu includenden Datei an die Stelle wo das #include steht. Bei #include &quot;foo&quot; sucht der Präprozessor im aktuellen Verzeichnis nach foo und bei #include &lt;foo&gt; sucht er im Include-Verzeichnis des Compilers.</p>
</blockquote>
<p>(quelle: <a href="http://tutorial.schornboeck.net/pp_include.htm" rel="nofollow">http://tutorial.schornboeck.net/pp_include.htm</a>)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1205706</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1205706</guid><dc:creator><![CDATA[Fachmann]]></dc:creator><pubDate>Mon, 08 Jan 2007 14:46:57 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse undefiniert on Mon, 08 Jan 2007 14:59:25 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
Den Satz verstehe ich schon, aber die Einfachheit wird in komplexen Programmen (zumindest was mich betrifft) ziemlich Unübersichtlich.</p>
<p>In anderen Programmiersprachen wie Java ist der Sachverhalt in meinen Augen verständlicher. Das liegt wohl vor allem daran, das man nicht unterscheiden muss wann man den Include in die h-Datei und wann in die cpp-Datei setzten muss...</p>
<p>Vielleicht fehlt mir auch einfach die Erfahrung ^^ <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1205717</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1205717</guid><dc:creator><![CDATA[HolyGrail]]></dc:creator><pubDate>Mon, 08 Jan 2007 14:59:25 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse undefiniert on Mon, 08 Jan 2007 16:55:11 GMT]]></title><description><![CDATA[<p>achso^^<br />
naja ich inkludier immer alle header dateien in meiner *.h datei dann kann nämlich meine *.h und meine *.cpp datei die funktionen der header datei benutzen weil ich in meiner *.cpp ja auch meine *.h datei inkludier.</p>
<p>verstehst du den satz auch schon?^^<br />
wenn nein dann weiss ich fast auch nicht weiter <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1205839</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1205839</guid><dc:creator><![CDATA[Fachmann]]></dc:creator><pubDate>Mon, 08 Jan 2007 16:55:11 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse undefiniert on Mon, 08 Jan 2007 17:17:42 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>und genau das ist der Grund für dein Problem gewesen.<br />
Du solltest immer so wenig wie nötig includen, vor allem in Headern selber. Auch mit Forward Declaration kann man sich machen Include sparen.<br />
Das hilft einerseits die Kompilierzeit zu senken, anderseits auch solche Kreis-Includes zu vermeiden.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1205861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1205861</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Mon, 08 Jan 2007 17:17:42 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse undefiniert on Mon, 08 Jan 2007 21:36:04 GMT]]></title><description><![CDATA[<p>heisst das ich hab recht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1206055</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1206055</guid><dc:creator><![CDATA[Fachmann]]></dc:creator><pubDate>Mon, 08 Jan 2007 21:36:04 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse undefiniert on Tue, 09 Jan 2007 11:11:07 GMT]]></title><description><![CDATA[<p>Also Fachmann ich glaube du solltest nicht alle Dateien in deine *.h Datei includieren ^^ Genau das habe ich ja auch gemacht... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Frage mich gerade warum ich nicht gleich auf Scott Meyers gehört habe?<br />
Item 31: Minimize compilation dependencies between files.<br />
* Depend on class <strong>declarations</strong> instead of class <strong>definitions</strong> whenever you can.</p>
<p>Includiert Ihr generell (die Ihr mehr Erfahrung habt als ich) keine (eigene) Header-Files (in *.h) sondern deklariert nur die Klasse? Kann man das generalisieren, oder gibt es Ausnahmen?</p>
<p>Gruß,<br />
Chris</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1206259</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1206259</guid><dc:creator><![CDATA[HolyGrail]]></dc:creator><pubDate>Tue, 09 Jan 2007 11:11:07 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse undefiniert on Tue, 09 Jan 2007 11:14:08 GMT]]></title><description><![CDATA[<p>Hallo</p>
<blockquote>
<p>Includiert Ihr generell (die Ihr mehr Erfahrung habt als ich) keine (eigene) Header-Files (in *.h) sondern deklariert nur die Klasse? Kann man das generalisieren, oder gibt es Ausnahmen?</p>
</blockquote>
<p>Es gibt immer Ausnahmen. Die Forward Deklaration reicht wenn man nur einen Pointer oder Referenz braucht. Braucht man aber konkrete Instanzen oder will man von der Klasse ableiten, muß man die gesamte Deklaration kennen. Dann kommt man um einen Include im Header nicht umhin.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1206262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1206262</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 09 Jan 2007 11:14:08 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse undefiniert on Tue, 09 Jan 2007 11:19:38 GMT]]></title><description><![CDATA[<p>Danke Akari,</p>
<p>klingt ziemlich logisch und macht Sinn. Gibt der scheinbar einfachen Definition des Includes aber einen faden Beigeschmack, weil der unerfahrene C++Coder durch einen Includekreis schnell mal in die Tischkannte beisst ...</p>
<p>Ok, wie gesagt danke für die Einsichten! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1206264</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1206264</guid><dc:creator><![CDATA[HolyGrail]]></dc:creator><pubDate>Tue, 09 Jan 2007 11:19:38 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse undefiniert on Tue, 09 Jan 2007 11:57:46 GMT]]></title><description><![CDATA[<p>HolyGrail schrieb:</p>
<blockquote>
<p>...Gibt der scheinbar einfachen Definition des Includes aber einen faden Beigeschmack, ...</p>
</blockquote>
<p>Naja, ich finde, es zwingt einen eben dazu, sich exakter Gedanken über Abhängigkeiten zu machen.<br />
... und wenn man seine Abhängigkeiten nicht sauber in den Griff bekommt, beissen einen die viel später (und oft unangenehmer) ins Gesäß. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1206283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1206283</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 09 Jan 2007 11:57:46 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse undefiniert on Tue, 09 Jan 2007 13:25:48 GMT]]></title><description><![CDATA[<p>Gedanken die ein Programmierer (meiner Meinung nach), aber besser in sein Softwaredesign stecken sollten, als in solche &quot;Sprachdetails&quot;.</p>
<p>--- Will jetzt aber keine Grundsatzdiskussion auslösen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1206322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1206322</guid><dc:creator><![CDATA[HolyGrail]]></dc:creator><pubDate>Tue, 09 Jan 2007 13:25:48 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse undefiniert on Tue, 09 Jan 2007 13:48:43 GMT]]></title><description><![CDATA[<p>HolyGrail schrieb:</p>
<blockquote>
<p>Gedanken die ein Programmierer (meiner Meinung nach), aber besser in sein Softwaredesign stecken sollten, als in solche &quot;Sprachdetails&quot;....</p>
</blockquote>
<p>Wenn er zu dem &quot;Sprachdetail&quot; kommt, ist aber die Designphase eigentlich schon vorbei - d.h. er tappt in die Falle, die er sich vorher selbst gelegt hat.<br />
Hat er eine saubere Abhängigkeitsdefinition designed, fällt ihm das include nicht in den Arm.... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>... ich weiß, dass das &quot;Schönwetterflugtheorie&quot; ist. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1206328</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1206328</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Tue, 09 Jan 2007 13:48:43 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse undefiniert on Fri, 16 Nov 2007 14:36:22 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich hätte zu dem Thema auch noch ne Frage:<br />
<a href="http://www.sambalmueslie.de/test/Klassendiagramm.png" rel="nofollow">http://www.sambalmueslie.de/test/Klassendiagramm.png</a><br />
So sieht meine Struktur aus.</p>
<p>Jetzt steh ich vor dem Problem:</p>
<ol>
<li>Was wo includen?</li>
<li>Wo eine Forward Deklaration</li>
</ol>
<p>Da die Klasse Framework alle anderen Klassen verwendet ist es da wohl eher sinnvol diese zu includen oder?</p>
<p>In der Klasse Handler hab ich eine Forward-Deklaration auf Framework.</p>
<pre><code class="language-cpp">#ifndef HANDLER_H_
#define HANDLER_H_

#include &lt;iostream&gt;
using namespace std;

#include &quot;Object.h&quot;
#include &quot;Framework.h&quot;
#include &quot;HandlerInfo.h&quot;
#include &quot;MSTEvent.h&quot;
#include &quot;MSTMessage.h&quot;

//#define HANDLER_DEBUG 0
class Framework;
extern Framework *the_framework;

class Handler : public Object
{
public:
	Handler();
	Handler(Handler &amp; rhs);
	~Handler();

	HandlerInfo&amp; getHandlerInfo();
	int getHandlerStatus();

	virtual void reciveEvent(MSTEvent* event);
	virtual void sendEvent(MSTEvent* event);
	virtual void sendMessage(MSTMessage* message);
	virtual void output(ostream&amp; os);
	virtual void operator=(Handler &amp; rhs);
	friend ostream&amp; operator &lt;&lt; (ostream&amp; os, Handler&amp; op);

private:
	int handler_id;
	int handler_status;
	HandlerInfo handler_info;
};

#endif /*HANDLER_H_*/
</code></pre>
<p>jetzt meckert mir halt der Compiler bei</p>
<pre><code class="language-cpp">void Handler::sendMessage(MSTMessage * message)
{
#ifdef HANDLER_DEBUG
	cout &lt;&lt; __PRETTY_FUNCTION__ &lt;&lt; endl;
#endif
	the_framework-&gt;writeMessage(message);
}
</code></pre>
<blockquote>
<p>no matching function for call to ‘Framework::writeMessage(MSTMessage*&amp;)’ MCX_Software_Test_V_0_4_1/MST_Framework/Handler Handler.cpp line 60</p>
</blockquote>
<p>Was mir auch logisch erscheint.<br />
Doch wie bekomme ich das weg??</p>
<p>Grüßle Oli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1404454</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1404454</guid><dc:creator><![CDATA[sambalmueslie]]></dc:creator><pubDate>Fri, 16 Nov 2007 14:36:22 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse undefiniert on Sat, 17 Nov 2007 15:52:12 GMT]]></title><description><![CDATA[<p>Wie gesagt, inkludiere so wenig wie nötig.<br />
D.h. entferne erst mal alle Includes und ersetze sie durch Vorwärtsreferenzen...<br />
(außer &quot;object.h&quot;, da du ja davon ableitest sowie &quot;HandlerInfo.h&quot;, da du davon ein Member erzeugst)</p>
<p>Selbst &lt;iostream&gt; kannst du durch &lt;iosfwd&gt; ersetzen (Forward references).</p>
<p>Nur in den Source-Dateien brauchst du dann die includes...</p>
<p>und vor allem:<br />
Verwende NIEMALS &quot;using namespace std;&quot; in Header-Dateien!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1404944</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1404944</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Sat, 17 Nov 2007 15:52:12 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse undefiniert on Sat, 17 Nov 2007 19:44:03 GMT]]></title><description><![CDATA[<p>Th schrieb:</p>
<blockquote>
<p>Wie gesagt, inkludiere so wenig wie nötig.<br />
D.h. entferne erst mal alle Includes und ersetze sie durch Vorwärtsreferenzen...<br />
(außer &quot;object.h&quot;, da du ja davon ableitest sowie &quot;HandlerInfo.h&quot;, da du davon ein Member erzeugst)</p>
<p>Selbst &lt;iostream&gt; kannst du durch &lt;iosfwd&gt; ersetzen (Forward references).</p>
<p>Nur in den Source-Dateien brauchst du dann die includes...</p>
<p>und vor allem:<br />
Verwende NIEMALS &quot;using namespace std;&quot; in Header-Dateien!!!</p>
</blockquote>
<p>Oki ich versuchs mal, kleine Frage am Rande noch, was sind den Vorwärtsreferenzen??<br />
Grüßle Oli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1405060</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1405060</guid><dc:creator><![CDATA[sambalmueslie]]></dc:creator><pubDate>Sat, 17 Nov 2007 19:44:03 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse undefiniert on Sun, 18 Nov 2007 10:34:46 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">class Framework; // Vorwärtsreferenz (Forward Reference)
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1405200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1405200</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Sun, 18 Nov 2007 10:34:46 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse undefiniert on Sun, 18 Nov 2007 19:09:26 GMT]]></title><description><![CDATA[<p>Th schrieb:</p>
<blockquote>
<pre><code class="language-cpp">class Framework; // Vorwärtsreferenz (Forward Reference)
</code></pre>
</blockquote>
<p>Ah ok.. thx..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1405532</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1405532</guid><dc:creator><![CDATA[sambalmueslie]]></dc:creator><pubDate>Sun, 18 Nov 2007 19:09:26 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse undefiniert on Sun, 18 Nov 2007 19:32:55 GMT]]></title><description><![CDATA[<p>ich halte es immer so, dass es eine zentrale headerfile gibt in der alle anderen header included werden. alle .cpp-dateien inkludieren *ausschließlich* diesen header.<br />
header-files (mit ausnahme des zentralen) inkludieren in diesem modell in der regel keine anderen header.</p>
<p>dadruch werden alle cpp-dateien von allen headern abhängig. jede header-änderung führt deshalb dazu, dass alle files neu kompiliert werden müssen. allerdings hat das auch einen großen vorteil: visual c++ kann precompiled header nur so mit maximaler effizienz verwenden, was die kompilierungsgeschwindigkeit teilweise enorm steigert.<br />
ich hab früher auch immer darauf geachtet, abhängigkeiten wo immer möglich zu vermeiden. im endeffekt bringts aber nix ausser zusätzlicher arbeit. die precompiled header machen die zusätzlichen abhängkeiten eigentlich immer mehr als wett.<br />
ein projekt, umgestellt auf dieses modell, kompilierte nachher mehr als 10 mal so schnell.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1405540</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1405540</guid><dc:creator><![CDATA[inkluda]]></dc:creator><pubDate>Sun, 18 Nov 2007 19:32:55 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse undefiniert on Sun, 18 Nov 2007 21:42:40 GMT]]></title><description><![CDATA[<p>HolyGrail schrieb:</p>
<blockquote>
<p>Includiert Ihr generell (die Ihr mehr Erfahrung habt als ich) keine (eigene) Header-Files (in *.h) sondern deklariert nur die Klasse? Kann man das generalisieren, oder gibt es Ausnahmen?</p>
</blockquote>
<p>Kurz gesprochen: Includiere was nötig ist, Deklariere was möglich ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Sofern ich Includes vermeiden kann, mache ich das auch (Sprich sofern nur Pointer oder Referenzen im Header verwendet werden: Vorwärtsdeklaration; sonst include). Dies hat mehrere Vorteile, einer davon ist die reduzierte Compilezeit <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1405589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1405589</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Sun, 18 Nov 2007 21:42:40 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse undefiniert on Sun, 18 Nov 2007 21:54:45 GMT]]></title><description><![CDATA[<p>inkluda schrieb:</p>
<blockquote>
<p>...eine zentrale headerfile gibt in der alle anderen header included werden. alle .cpp-dateien inkludieren *ausschließlich* diesen header...</p>
</blockquote>
<p>Dies halte ich nicht nur für ein sehr schlechtes Design, das ist auch eben dieses:</p>
<p>inkluda schrieb:</p>
<blockquote>
<p>dadruch werden alle cpp-dateien von allen headern abhängig.</p>
</blockquote>
<p>Eben darum...</p>
<p>inkluda schrieb:</p>
<blockquote>
<p>jede header-änderung führt deshalb dazu, dass alle files neu kompiliert werden müssen. allerdings hat das auch einen großen vorteil: visual c++ kann precompiled header nur so mit maximaler effizienz verwenden, was die kompilierungsgeschwindigkeit teilweise enorm steigert.</p>
</blockquote>
<p>Die Nachteile überwiegen aber:<br />
1. Der Precompiled Header ist nicht ANSI C++ Standard<br />
2. Die Kompilierungsgeschwindigkeit wird dadurch nur zu einen bestimmten Grad erhöht, bei großen Projekten kann genau das Gegenteil der Fall sein. Der Precompiled Header sollte wenn man ihn schon verwendet nur das enthalten was tatsächlich möglichst nie geändert wird<br />
3. Warum umbedingt bei einer kleinen Änderung alles neu linken müssen?</p>
<p>Es ist meines Erachtens immer besser die Abhängigkeiten zu minimieren (grade wenn bestimmte Dateien von mehreren Projektteilen verwendet werden), dadurch sinkt der Linkaufwand ohnehin schon erheblich, und es wird immer nur dort etwas neu gelinkt wo es unbedingt notwendig ist.</p>
<p>Ich persönlich bin aber schon aus einem anderen Grund gegen Precompiled Header: Wenn du mit unterschiedlichen Compilern arbeitest die entweder teilweise ohne Precompiled Header arbeiten, oder mit fixen (unterschiedlichen) Namen, kann das dazu führen das du, falls man Header in mehreren Projekten benutzt du immer noch irgendwelche &quot;Dummydateien&quot; hinzufügen musst damit der Compiler xyz glücklich wird...</p>
<p>Warum abhängigkeiten überhaupt maximieren, und nicht einfach durch ein sauberes Design die Linkzeit reduzieren und Probleme vermeiden?</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1405601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1405601</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Sun, 18 Nov 2007 21:54:45 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse undefiniert on Wed, 21 Nov 2007 08:35:03 GMT]]></title><description><![CDATA[<p>asc schrieb:</p>
<blockquote>
<p>1. Der Precompiled Header ist nicht ANSI C++ Standard</p>
</blockquote>
<p>aha. und? wenn ich auf meiner zielplattform mein projekt 10x schneller kompilieren kann ist mir das ziemlich egal.<br />
außerdem spielt es keine rolle, weil es für andere compiler transparent ist. entweder sie werden angelegt und genutzt oder nicht. kompilieren tuts in jedem fall.</p>
<blockquote>
<p>2. Die Kompilierungsgeschwindigkeit wird dadurch nur zu einen bestimmten Grad erhöht, bei großen Projekten kann genau das Gegenteil der Fall sein.</p>
</blockquote>
<p>ist mir aber noch nie passiert und ich arbeite an relativ großen projekten (eines davon ~600k LOC)</p>
<blockquote>
<p>3. Warum umbedingt bei einer kleinen Änderung alles neu linken müssen?</p>
</blockquote>
<p>visual c++ kompiliert mit den richtigen header-einstellungen 100 dateien in der gleichen zeit wie es ohne precompiled header nur 10 dateien schafft (schätzung, ich hab die zeit nicht gemessen). da ist der break-even schnell erreicht.<br />
natürlich gibt es szenarien, in denen es ohne ph vielleicht kurzfristig schneller ginge (z.b. tweaking von irgendwelchen werten im header einer basisbibliothek).</p>
<blockquote>
<p>Warum abhängigkeiten überhaupt maximieren, und nicht einfach durch ein sauberes Design die Linkzeit reduzieren und Probleme vermeiden?</p>
</blockquote>
<p>ich bin bisher bei großen projekten mit meinem ansatz gut gefahren und in jedem projekt in das ich eingestiegen bin, wurde mir mir bessere effizienz bescheinigt, nachdem ein projekt von deinem modell auf meins umgestellt wurde.<br />
zugegebenermaßen waren mehrere unterschiedliche compiler dabei nie ein thema.</p>
<p>theoretisch mag dein ansatz der sauberere sein, in der praxis fährt man meiner erfahrung nach besser mit meinem ansatz. ich habe vor ein paar jahren noch den gleichen standpunkt wie du vehement vertreten, wurde aber zwischenzeitlich eines besseren belehrt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1407139</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1407139</guid><dc:creator><![CDATA[inkluda]]></dc:creator><pubDate>Wed, 21 Nov 2007 08:35:03 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse undefiniert on Wed, 21 Nov 2007 08:51:42 GMT]]></title><description><![CDATA[<p>inkluda schrieb:</p>
<blockquote>
<blockquote>
<p>3. Warum umbedingt bei einer kleinen Änderung alles neu linken müssen?</p>
</blockquote>
<p>visual c++ kompiliert mit den richtigen header-einstellungen 100 dateien in der gleichen zeit wie es ohne precompiled header nur 10 dateien schafft (schätzung, ich hab die zeit nicht gemessen). da ist der break-even schnell erreicht.<br />
natürlich gibt es szenarien, in denen es ohne ph vielleicht kurzfristig schneller ginge (z.b. tweaking von irgendwelchen werten im header einer basisbibliothek).</p>
</blockquote>
<p>Das gilt aber afaik nur, wenn der präcompilte Header halbwegs stabil ist - wenn sich dort ständig etwas ändert, hast du ein Problem: Statt nur die 2 Quellfiles neu zu compilieren, die wirklich etwas mit der Änderung zu tun haben, mußt du alle Quelldateien des Projekts neu compilieren.</p>
<p>(PS: Wie groß sind denn die Projekte, die du üblicherweise bearbeitest?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1407144</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1407144</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 21 Nov 2007 08:51:42 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse undefiniert on Wed, 21 Nov 2007 10:00:48 GMT]]></title><description><![CDATA[<blockquote>
<p>(PS: Wie groß sind denn die Projekte, die du üblicherweise bearbeitest?)</p>
</blockquote>
<p>multimedia-projekte, auch spiele, im bereich von 100k bis 1mio loc.<br />
was noch dazu gesagt werden muss: natürlich hängen dabei nicht alle dateien im gleichen .vcproj, sondern sind normalerweise auf verschiedene libs verteilt, die unabhängig voneinander kompiliert werden. wenn man ein einzelnes makefile mit 3000 files hat, geht die rechnung wahrscheinlich nicht mehr auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1407181</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1407181</guid><dc:creator><![CDATA[inkluda]]></dc:creator><pubDate>Wed, 21 Nov 2007 10:00:48 GMT</pubDate></item><item><title><![CDATA[Reply to Basisklasse undefiniert on Wed, 21 Nov 2007 10:08:24 GMT]]></title><description><![CDATA[<p>inkluda schrieb:</p>
<blockquote>
<blockquote>
<p>(PS: Wie groß sind denn die Projekte, die du üblicherweise bearbeitest?)</p>
</blockquote>
<p>multimedia-projekte, auch spiele, im bereich von 100k bis 1mio loc.</p>
</blockquote>
<p>Und wieviele Klassen sind daran beteiligt?</p>
<p>(btw, wenn du alle Klassenheader in die &quot;stdafx.h&quot; reinpackst, mußt du auch wieder auf die Reihenfolge achten)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1407188</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1407188</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 21 Nov 2007 10:08:24 GMT</pubDate></item></channel></rss>