<?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[Includes, Querabhängigkeiten [done]]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Ich stehe gerade vor folgendem Problem.<br />
Ich habe zwei Klassen &quot;TSCEngine&quot; und &quot;TSCNet&quot;</p>
<p>sc_engine.h:</p>
<pre><code class="language-cpp">#ifndef sc_engineH
#define sc_engineH

#include &quot;sc_net.h&quot;

class TSCEngine : public TObject
{
  private : TSCNet *Net;
  ...
}
#endif
</code></pre>
<p>sc_net.h:</p>
<pre><code class="language-cpp">#ifndef sc_netH
#define sc_netH

class TSCEngine;

class TSCNet : public TObject
{
  ...
  public : TSCNet(TSCEngine *Owner);   
}

#endif
</code></pre>
<p>Wenn ich das richtig verstanden habe, sollte</p>
<pre><code class="language-cpp">class TSCEngine;
</code></pre>
<p>als Forward-Include TSCEngine vorab bekannt machen. Die tatsächliche Klasse wird durch das includen der &quot;sc_engine.h&quot; in der &quot;sc_net.cpp&quot; realisiert.</p>
<p>Leider funktioniert das nicht.</p>
<p>Zwar scheint TSCEngine in der &quot;sc_net.h&quot; bekannt zu sein, dafür wirft mir der Compiler haufenweise Fehler in der &quot;sc_net.cpp&quot; und sagt mir, dass die Methoden, die eigentlich zu TSCNet gehören sollten nicht zu dieser Klasse gehören:</p>
<pre><code>[C++ Error] sc_net.cpp(13): E2316 '_fastcall TSCNet::{(int)' is not a member of 'TSCNet'
[C++ Error] sc_net.cpp(25): E2316 '_fastcall TSCNet::{(int,AnsiString)' is not a member of 'TSCNet'
[C++ Error] sc_net.cpp(52): E2316 'RecieveText' is not a member of 'TCustomWinSocket'
[C++ Error] sc_net.cpp(56): E2379 Statement missing ;
[C++ Error] sc_net.cpp(59): E2089 Identifier 'Write' cannot have a type qualifier
[C++ Error] sc_net.cpp(125): E2139 Declaration missing ;
[C++ Error] sc_net.cpp(125): E2134 Compound statement missing }
</code></pre>
<p>Was mache ich hier falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/184714/includes-querabhängigkeiten-done</link><generator>RSS for Node</generator><lastBuildDate>Wed, 23 Sep 2026 21:38:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/184714.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 18 Jun 2007 14:29:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Includes, Querabhängigkeiten [done] on Mon, 18 Jun 2007 19:18:14 GMT]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Ich stehe gerade vor folgendem Problem.<br />
Ich habe zwei Klassen &quot;TSCEngine&quot; und &quot;TSCNet&quot;</p>
<p>sc_engine.h:</p>
<pre><code class="language-cpp">#ifndef sc_engineH
#define sc_engineH

#include &quot;sc_net.h&quot;

class TSCEngine : public TObject
{
  private : TSCNet *Net;
  ...
}
#endif
</code></pre>
<p>sc_net.h:</p>
<pre><code class="language-cpp">#ifndef sc_netH
#define sc_netH

class TSCEngine;

class TSCNet : public TObject
{
  ...
  public : TSCNet(TSCEngine *Owner);   
}

#endif
</code></pre>
<p>Wenn ich das richtig verstanden habe, sollte</p>
<pre><code class="language-cpp">class TSCEngine;
</code></pre>
<p>als Forward-Include TSCEngine vorab bekannt machen. Die tatsächliche Klasse wird durch das includen der &quot;sc_engine.h&quot; in der &quot;sc_net.cpp&quot; realisiert.</p>
<p>Leider funktioniert das nicht.</p>
<p>Zwar scheint TSCEngine in der &quot;sc_net.h&quot; bekannt zu sein, dafür wirft mir der Compiler haufenweise Fehler in der &quot;sc_net.cpp&quot; und sagt mir, dass die Methoden, die eigentlich zu TSCNet gehören sollten nicht zu dieser Klasse gehören:</p>
<pre><code>[C++ Error] sc_net.cpp(13): E2316 '_fastcall TSCNet::{(int)' is not a member of 'TSCNet'
[C++ Error] sc_net.cpp(25): E2316 '_fastcall TSCNet::{(int,AnsiString)' is not a member of 'TSCNet'
[C++ Error] sc_net.cpp(52): E2316 'RecieveText' is not a member of 'TCustomWinSocket'
[C++ Error] sc_net.cpp(56): E2379 Statement missing ;
[C++ Error] sc_net.cpp(59): E2089 Identifier 'Write' cannot have a type qualifier
[C++ Error] sc_net.cpp(125): E2139 Declaration missing ;
[C++ Error] sc_net.cpp(125): E2134 Compound statement missing }
</code></pre>
<p>Was mache ich hier falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1308438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1308438</guid><dc:creator><![CDATA[Horschdware]]></dc:creator><pubDate>Mon, 18 Jun 2007 19:18:14 GMT</pubDate></item><item><title><![CDATA[Reply to Includes, Querabhängigkeiten [done] on Mon, 18 Jun 2007 14:39:39 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>eine &quot;forward declaration&quot; ersetzt nicht in allen Fällen die vollständige Deklaration !<br />
Sobald Du die konkrete Deklaration einsetzt (z.B. beim Zugriff auf Member), brauchst Du sie auch.<br />
Oder anders ausgedrückt: Für einen Zeiger oder eine Referenz reicht eine &quot;forward declaration&quot; ... für mehr eigentlich nicht.<br />
Aus so einer &quot;Falle&quot; kommst Du, in dem Du die Implementierung der Memberfunktionen von der Klassendeklaration trennst:</p>
<pre><code class="language-cpp">// A.h
class B;

class A {
   B&amp; meinB;
public:
   A(B&amp; b);
   void do();
};
</code></pre>
<pre><code class="language-cpp">// A.cpp
#include &quot;B.h&quot; // erst hier includieren

A::A(B&amp; b) : meinB(b) {}
void A::do() { meinB.doMich(); }
</code></pre>
<p>Ebenso andersherum: A.h nur in B.cpp inkludieren.<br />
Schwierig wird's, wenn eine von der andern erben muss (aber da es keine &quot;gegenseitige Vererbung&quot; geben kann, muss dann eben doch das eine .h im Anderen inkludiert werden)</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1308443</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1308443</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 18 Jun 2007 14:39:39 GMT</pubDate></item><item><title><![CDATA[Reply to Includes, Querabhängigkeiten [done] on Mon, 18 Jun 2007 14:37:04 GMT]]></title><description><![CDATA[<p>Hmm... grübl...</p>
<p>Ich habe nur leider diese Querabhängigkeit meiner zwei Klassen.<br />
Wie bekomme ich das hin, dass das trotzdem funktioniert?</p>
<p>In der &quot;sc_net.cpp&quot; wird ja im Übrigen die &quot;sc_engine.h&quot; includiert.<br />
Das sollte doch dann genügen, oder irre ich mich?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1308445</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1308445</guid><dc:creator><![CDATA[Horschdware]]></dc:creator><pubDate>Mon, 18 Jun 2007 14:37:04 GMT</pubDate></item><item><title><![CDATA[Reply to Includes, Querabhängigkeiten [done] on Mon, 18 Jun 2007 14:38:43 GMT]]></title><description><![CDATA[<p>Horschdware schrieb:</p>
<blockquote>
<p>Hallo zusammen!</p>
<p>als Forward-Include TSCEngine vorab bekannt machen. Die tatsächliche Klasse wird durch das includen der &quot;sc_engine.h&quot; in der &quot;sc_net.cpp&quot; realisiert.</p>
<p>Leider funktioniert das nicht.</p>
<p>Zwar scheint TSCEngine in der &quot;sc_net.h&quot; bekannt zu sein, dafür wirft mir der Compiler haufenweise Fehler in der &quot;sc_net.cpp&quot; und sagt mir, dass die Methoden, die eigentlich zu TSCNet gehören sollten nicht zu dieser Klasse gehören:</p>
<pre><code>[C++ Error] sc_net.cpp(13): E2316 '_fastcall TSCNet::{(int)' is not a member of 'TSCNet'
[C++ Error] sc_net.cpp(25): E2316 '_fastcall TSCNet::{(int,AnsiString)' is not a member of 'TSCNet'
[C++ Error] sc_net.cpp(52): E2316 'RecieveText' is not a member of 'TCustomWinSocket'
[C++ Error] sc_net.cpp(56): E2379 Statement missing ;
[C++ Error] sc_net.cpp(59): E2089 Identifier 'Write' cannot have a type qualifier
[C++ Error] sc_net.cpp(125): E2139 Declaration missing ;
[C++ Error] sc_net.cpp(125): E2134 Compound statement missing }
</code></pre>
<p>Was mache ich hier falsch?</p>
</blockquote>
<p>Binde mal in der sc_net.cpp auch die komplette sc_engine.h ein:<br />
#include &quot;sc_engine.h&quot;</p>
<p>Ansonsten verstehe ich die Fehlermeldung &quot;'TSCNet::{(int)' is not a member of 'TSCNet'&quot; nicht, daher wäre es für mich sinnvoll den Code mal zu sehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1308448</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1308448</guid><dc:creator><![CDATA[Xin]]></dc:creator><pubDate>Mon, 18 Jun 2007 14:38:43 GMT</pubDate></item><item><title><![CDATA[Reply to Includes, Querabhängigkeiten [done] on Mon, 18 Jun 2007 14:39:33 GMT]]></title><description><![CDATA[<p>Am Ende der Klassendeklarationen fehlen Semikola.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1308450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1308450</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Mon, 18 Jun 2007 14:39:33 GMT</pubDate></item><item><title><![CDATA[Reply to Includes, Querabhängigkeiten [done] on Mon, 18 Jun 2007 14:40:58 GMT]]></title><description><![CDATA[<p>Hi Horschdware,</p>
<p>mein geändertes Post gesehen (s.o.) ?</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1308452</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1308452</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 18 Jun 2007 14:40:58 GMT</pubDate></item><item><title><![CDATA[Reply to Includes, Querabhängigkeiten [done] on Mon, 18 Jun 2007 16:31:34 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/734">@Simon</a><br />
Sorry, war kurz weg.<br />
Danke für die Erklärung.<br />
Leider stelle ich mich irgendwie etwas dappig an.<br />
Ich habe jetzt versucht, das so umzusetzen, wie du es geschrieben hast.<br />
Die Anzahl der Compilerfehler wird zwar geringer aber funktionieren tut das trotzdem nicht ganz ^^</p>
<p>sc_engine.h:</p>
<pre><code class="language-cpp">#ifndef sc_engineH
#define sc_engineH

class TSCNet;

class TSCEngine : public TObject
{
  private : TSCNet *Net;
  ...  

}
#endif
</code></pre>
<p>sc_engine.cpp</p>
<pre><code class="language-cpp">#include &lt;vcl.h&gt;
#pragma hdrstop

#include &quot;sc_engine.h&quot;
#include &quot;sc_net.h&quot;
</code></pre>
<p>sc_net.h</p>
<pre><code class="language-cpp">#ifndef sc_netH
#define sc_netH

#include &quot;scktcomp.hpp&quot;
#include &quot;coords.h&quot;

class TSCNet : public TObject
{
  ...
  public : 
    __fastcall TSCNet(TSCEngine *owner, int Port);
    __fastcall TSCNet(TSCEngine *owner, int Port, String Host);
};
#endif
</code></pre>
<p>sc_net.cpp</p>
<pre><code class="language-cpp">#include &lt;vcl.h&gt;
#pragma hdrstop

#include &quot;sc_engine.h&quot;
</code></pre>
<p>Jetzt meckert er, dass die zwei Konstruktoren von TSCNet keine Member der Klasse TSCNet sind und<br />
&quot;Undefined symbol TObject&quot; in einer Zeile, in der es um TObjectTCustomWinSocket geht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1308533</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1308533</guid><dc:creator><![CDATA[Horschdware]]></dc:creator><pubDate>Mon, 18 Jun 2007 16:31:34 GMT</pubDate></item><item><title><![CDATA[Reply to Includes, Querabhängigkeiten [done] on Mon, 18 Jun 2007 16:35:17 GMT]]></title><description><![CDATA[<p>Was soll der __fastcall-Kram da? Vertraust du deinem Compiler nicht? Mach das da (und, falls es dort auch ist, in der Quellcodedatei) mal weg. Im Übrigen solltest du vielleicht die Compilerfehler etwas genauer wiedergeben.</p>
<p>Achja, ist zwar OT, aber wenn du designtechnisch dazu was hören willst, sag bescheid <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1308540</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1308540</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Mon, 18 Jun 2007 16:35:17 GMT</pubDate></item><item><title><![CDATA[Reply to Includes, Querabhängigkeiten [done] on Mon, 18 Jun 2007 16:53:27 GMT]]></title><description><![CDATA[<p>Horschdware schrieb:</p>
<blockquote>
<p>sc_net.cpp</p>
<pre><code class="language-cpp">#include &lt;vcl.h&gt;
#pragma hdrstop

#include &quot;sc_engine.h&quot;
</code></pre>
</blockquote>
<p>Fehlt da nicht noch ein #include &quot;sc_net.h&quot; ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1308548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1308548</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 18 Jun 2007 16:53:27 GMT</pubDate></item><item><title><![CDATA[Reply to Includes, Querabhängigkeiten [done] on Mon, 18 Jun 2007 19:15:42 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a></p>
<p>hmm.. diese includeanweisung steht ja jetzt in der sc_engine.cpp.<br />
Oder hab ich das von oben jetzt komplett falsch verstanden?</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9606">@filmor</a><br />
da lasse ich mich gerne belehren!<br />
das __fastcall steht da, um die Konstruktoren der TObject Klasse überschreiben zu können. oder wäre das hier unnötig gewesen?</p>
<p>die genauen Fehlermeldungen:</p>
<pre><code>[C++ Error] 
sc_net.cpp(14): E2316 '_fastcall TSCNet::{(int)' is not a member of 'TSCNet'
[C++ Error] sc_net.cpp(26): E2316 '_fastcall TSCNet::{(int,AnsiString)' is not a member of 'TSCNet'
[C++ Error] sc_net.cpp(36): E2451 Undefined symbol 'TObject'
</code></pre>
<p>Die Codestellen dazu:</p>
<p>Zeile 14:</p>
<pre><code class="language-cpp">__fastcall TSCNet :: TSCNet(int Port)
{
...
</code></pre>
<p>Zeile 26:</p>
<pre><code class="language-cpp">__fastcall TSCNet :: TSCNet(int Port, String Host)
{
...
</code></pre>
<p>Zeile 36:</p>
<pre><code class="language-cpp">void __fastcall TSCNet::OnClientRead(TObject *Sender, TCustomWinSocket *Socket)
{
...
</code></pre>
<p>In Zeile 36 wird das TCustomWinSocket angemeckert</p>
<p>Edit:<br />
Gut... nach langem Überlegen und Kopf freibekommen bin ich gerade darauf gestoßen. Es tat richtig Weh:</p>
<p>Headerdatei:</p>
<pre><code class="language-cpp">class TSCNet : public TObject
{
  public : __fastcall TSCNet(TSCEngine *owner, int Port);
}
</code></pre>
<p>Cpp- Datei:</p>
<pre><code class="language-cpp">__fastcall TSCNet::TSCNet(int Port) 
{
...
</code></pre>
<p>Danke trotzdem an alle, die mitgeholfen haben.<br />
Insbesondere Simon2, für die tolle Erklärung!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1308629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1308629</guid><dc:creator><![CDATA[Horschdware]]></dc:creator><pubDate>Mon, 18 Jun 2007 19:15:42 GMT</pubDate></item><item><title><![CDATA[Reply to Includes, Querabhängigkeiten [done] on Mon, 18 Jun 2007 19:12:03 GMT]]></title><description><![CDATA[<p>Horschdware schrieb:</p>
<blockquote>
<p>da lasse ich mich gerne belehren!</p>
</blockquote>
<p>Na dann ...<br />
1. Präfixe sind unpraktisch. Benutz stattdessen Namensräume. Präfixe, die die &quot;Art&quot; des Namens angeben find ich persönlich unpraktisch, das ist aber mehr Geschmackssache.<br />
2. Es gibt sehr selten triftige Gründe, /jede/ Klasse von einer bestimmten Klasse (bei dir TObject) abzuleiten. Haben wirklich alle Objekte bei dir in irgendeinem Bereich gleiche Eigenschaften?<br />
3. Benutz' keine compiler- oder plattformspezifischen Schlüsselworte wenn du nicht musst. Bist du dir sicher, dass du weißt, was __fastcall bedeutet? Bist du dir sicher, dass du es brauchst? Wenn nicht, dann weg damit. Lass die Optimierungen mal ruhig von deinem Compiler machen.</p>
<p>Damit könnte dein Code in etwa so aussehen:</p>
<pre><code class="language-cpp">// sc/engine.hpp
#ifndef SC_ENGINE_HPP // .h benutzt man auch für C, hpp oder hxx ist eindeutiger
#define SC_ENGINE_HPP // Groß geschrieben, um nicht mit anderen Bezeichnern
                      // ins Gehege zu kommen

namespace sc
{
    class Net;

    class Engine
    {
    private:
        Net* _net;
        ...
    };
}
#endif

// engine.cpp
#include &lt;vcl.h&gt;
#pragma hdrstop

#include &quot;engine.hpp&quot;
#include &quot;net.hpp&quot;

namespace sc
{
   ...
}

// net.hpp
#ifndef SC_NET_HPP
#define SC_NET_HPP

#include &quot;socketcomp?.hpp&quot; // Du kannst ruhig längere Namen verwenden, 8.3 ist
#include &quot;coords.hpp&quot;      // nicht mehr erforderlich ;)

namespace sc
{

    class Net
    {
        ...
    public:
        Net(Engine* owner, int Port);
        Net(Engine* owner, int Port, String Host);
    };
}

#endif

// net.cpp

#include &lt;vcl.h&gt;
#pragma hdrstop

#include &quot;engine.hpp&quot;

namespace sc
{
    ...
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1308647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1308647</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Mon, 18 Jun 2007 19:12:03 GMT</pubDate></item><item><title><![CDATA[Reply to Includes, Querabhängigkeiten [done] on Mon, 18 Jun 2007 19:21:56 GMT]]></title><description><![CDATA[<p><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>
<p>Danke!!<br />
Dadurch schaut das gleich um 150% besser aus!</p>
<p>Nachmal wegen dem __fastcall:</p>
<p>Ich will, dass durch ein Event eine bestimmte Funktion aufgerufgen wird und weise zu :</p>
<pre><code class="language-cpp">Client-&gt;OnRead = this-&gt;OnRead;
</code></pre>
<p>Dabei muss meine Funktion TSCNet::OnRead die Direktive __fastcall haben, da ich sie sonst nicht zuweisen kann. Ansonsten hätte ich das so auch nicht gemacht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1308656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1308656</guid><dc:creator><![CDATA[Horschdware]]></dc:creator><pubDate>Mon, 18 Jun 2007 19:21:56 GMT</pubDate></item></channel></rss>