<?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[[GELÖST] Klassenmember mit Objektpointer im Parameter und Return]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe folgende Situation:</p>
<pre><code>class Request {
    ...
    Response* respond() { ... }
};

class Response {
    ...
    void send() { ... }
};

class Server {
    void doAccept() {
        this-&gt;onAccept(new Request(...))-&gt;send();
    }

    virtual Response* onAccept(Request* request) {
        // z.B.
        return request-&gt;respond();
    }
};
</code></pre>
<p>Der Compiler (G++) beschwert sich heftigst:</p>
<blockquote>
<p>(Bezogen auf den Codeausschnitt oben Zeile 16:<br />
error: expected ';' at end of member declaration<br />
error: expected ')' before '*' token</p>
</blockquote>
<p>Das Serverobjekt erstellt also eine Request aus den empfangenen Daten und antwortet mit einem Response Objekt.</p>
<p>Das ganze soll virtual sein, weil der Server nur ein Basisimplementierung sein soll und für den Eigentlichen Anwendungsfall abgeleitet werden soll.</p>
<p>Ich bin auch auf die Idee gekommen, einfach einen funktionspointer zu setzen, anstatt abzuleiten.</p>
<p>Aber einerseits passt das nicht ins Konzept und andererseits will ich wissen, wie ich genau diese Situation löse. Immerhin will ich auch was dazu lernen und nicht irgendein workaround suchen.</p>
<p>Vielen Dank für Hilfe</p>
<p>Der Verzweifelte</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/304944/gelöst-klassenmember-mit-objektpointer-im-parameter-und-return</link><generator>RSS for Node</generator><lastBuildDate>Fri, 26 Jun 2026 19:21:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/304944.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 17 Jun 2012 16:14:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [GELÖST] Klassenmember mit Objektpointer im Parameter und Return on Mon, 18 Jun 2012 19:34:34 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich habe folgende Situation:</p>
<pre><code>class Request {
    ...
    Response* respond() { ... }
};

class Response {
    ...
    void send() { ... }
};

class Server {
    void doAccept() {
        this-&gt;onAccept(new Request(...))-&gt;send();
    }

    virtual Response* onAccept(Request* request) {
        // z.B.
        return request-&gt;respond();
    }
};
</code></pre>
<p>Der Compiler (G++) beschwert sich heftigst:</p>
<blockquote>
<p>(Bezogen auf den Codeausschnitt oben Zeile 16:<br />
error: expected ';' at end of member declaration<br />
error: expected ')' before '*' token</p>
</blockquote>
<p>Das Serverobjekt erstellt also eine Request aus den empfangenen Daten und antwortet mit einem Response Objekt.</p>
<p>Das ganze soll virtual sein, weil der Server nur ein Basisimplementierung sein soll und für den Eigentlichen Anwendungsfall abgeleitet werden soll.</p>
<p>Ich bin auch auf die Idee gekommen, einfach einen funktionspointer zu setzen, anstatt abzuleiten.</p>
<p>Aber einerseits passt das nicht ins Konzept und andererseits will ich wissen, wie ich genau diese Situation löse. Immerhin will ich auch was dazu lernen und nicht irgendein workaround suchen.</p>
<p>Vielen Dank für Hilfe</p>
<p>Der Verzweifelte</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224219</guid><dc:creator><![CDATA[Verzweifelter]]></dc:creator><pubDate>Mon, 18 Jun 2012 19:34:34 GMT</pubDate></item><item><title><![CDATA[Reply to [GELÖST] Klassenmember mit Objektpointer im Parameter und Return on Sun, 17 Jun 2012 16:23:37 GMT]]></title><description><![CDATA[<p>Auf den ersten Blick fehlen die <strong>;</strong> am Ende der Klassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224223</guid><dc:creator><![CDATA[tommy_tom_tom]]></dc:creator><pubDate>Sun, 17 Jun 2012 16:23:37 GMT</pubDate></item><item><title><![CDATA[Reply to [GELÖST] Klassenmember mit Objektpointer im Parameter und Return on Sun, 17 Jun 2012 16:34:23 GMT]]></title><description><![CDATA[<p>tommy_tom_tom schrieb:</p>
<blockquote>
<p>Auf den ersten Blick fehlen die <strong>;</strong> am Ende der Klassen.</p>
</blockquote>
<p>^^ Schlaupuper <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="😉"
    /> Danke. Habs mal hinzugefügt.<br />
Der Code ist nur ein Ausschnitt, halb Copy'n'Paste, halb ausm Kopf, dass nur der wesentliche Teil hier steht.</p>
<p>Edit: Auch im Originalcode von mir sind die ;, keine Sorge, hab paranoider Weise nochmal geschaut ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224226</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224226</guid><dc:creator><![CDATA[Verzweifelter]]></dc:creator><pubDate>Sun, 17 Jun 2012 16:34:23 GMT</pubDate></item><item><title><![CDATA[Reply to [GELÖST] Klassenmember mit Objektpointer im Parameter und Return on Sun, 17 Jun 2012 16:44:59 GMT]]></title><description><![CDATA[<p>Tja <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="😃"
    /> ... Aber wie soll man dazu was sagen, wenn der Code nichtmal dem Original entspricht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224232</guid><dc:creator><![CDATA[tommy_tom_tom]]></dc:creator><pubDate>Sun, 17 Jun 2012 16:44:59 GMT</pubDate></item><item><title><![CDATA[Reply to [GELÖST] Klassenmember mit Objektpointer im Parameter und Return on Sun, 17 Jun 2012 17:07:30 GMT]]></title><description><![CDATA[<p>tommy_tom_tom schrieb:</p>
<blockquote>
<p>Tja <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="😃"
    /> ... Aber wie soll man dazu was sagen, wenn der Code nichtmal dem Original entspricht?</p>
</blockquote>
<p>Prinzipiell ist es das Original. Nur das alles unwesentliche weggelassen ist (Namespaces, andere Member usw.) und der Teil ausm Kopf z.B. das class {} war, daher auch ohne ;, in eclipse hab ich nen Template damit ich's net vergess <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>EDIT: mobilophon autovervollständigungs zeugs -.-</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224235</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224235</guid><dc:creator><![CDATA[Verzweifelter]]></dc:creator><pubDate>Sun, 17 Jun 2012 17:07:30 GMT</pubDate></item><item><title><![CDATA[Reply to [GELÖST] Klassenmember mit Objektpointer im Parameter und Return on Sun, 17 Jun 2012 17:17:50 GMT]]></title><description><![CDATA[<p>Schick doch mal den original Code und die ganze Fehlermeldung wenn dus zur Hand hast - ich seh da nix.</p>
<p>An was schreibstn da überhaupt?<br />
Grübel selbst grad an Netzwerk rum...</p>
<p>Gruss</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224239</guid><dc:creator><![CDATA[tommy_tom_tom]]></dc:creator><pubDate>Sun, 17 Jun 2012 17:17:50 GMT</pubDate></item><item><title><![CDATA[Reply to [GELÖST] Klassenmember mit Objektpointer im Parameter und Return on Sun, 17 Jun 2012 19:24:16 GMT]]></title><description><![CDATA[<p>Viel mehr gibts in dem Teil der Bibliothek noch nicht, WEIL gerade dieses Problem vorherrscht *g* Aber hier mal der Originalcode:</p>
<pre><code>#ifndef HTTP_H_
#define HTTP_H_

#include &lt;Base.h&gt;

#include &lt;Network.h&gt;

#include &lt;Network/HTTP/Response.h&gt;
#include &lt;Network/HTTP/Request.h&gt;
#include &lt;Network/HTTP/Server.h&gt;

#endif /* HTTP_H_ */
</code></pre>
<pre><code>#ifndef REQUEST_H_
#define REQUEST_H_

#include &lt;Network/HTTP.h&gt;

namespace Network {

namespace HTTP {

class Response;

class Request : public Object {
	DEFAULT_OBJECT_GETCLASSNAME(&quot;Network::HTTP&quot;, &quot;Request&quot;)

public:
	enum Method {
		GET,
		POST,
		HEAD,
	};

private:
	Method method;

public:
	Request();

	Request(ByteBuffer* buffer);

	Request(Connection* client);

	Request(const Request&amp; other);

	~Request();

private:
	void parseBuffer(ByteBuffer* buffer);

public:
	Response* respond() const {
		return new Response();
	}
};

}  // namespace HTTP

}  // namespace Network

#endif /* REQUEST_H_ */
</code></pre>
<pre><code>#ifndef RESPONSE_H_
#define RESPONSE_H_

#include &lt;Network/HTTP.h&gt;

namespace Network {

namespace HTTP {

class Response : public Object {
	DEFAULT_OBJECT_GETCLASSNAME(&quot;Network::HTTP&quot;, &quot;Response&quot;)

private:

public:
	Response();

	Response(const Response&amp; other);

	~Response();

public:
	void send();
};

}  // namespace HTTP

}  // namespace Network

#endif /* RESPONSE_H_ */
</code></pre>
<pre><code>#ifndef SERVER_H_
#define SERVER_H_

#include &lt;Network/HTTP.h&gt;

namespace Network {

namespace HTTP {

class Server : public Object {
	DEFAULT_OBJECT_GETCLASSNAME(&quot;Network::HTTP&quot;, &quot;Server&quot;)

private:
	EndPoint *ep;
	Listener *listener;

public:
	Server();

	Server(EndPoint* ep);

	virtual ~Server();

public:
	void doListen() {
		this-&gt;listener = new Listener();
		this-&gt;listener-&gt;doListen(this-&gt;ep);

		this-&gt;onAccept(new Request(this-&gt;listener-&gt;doAccept()))-&gt;send();
	}

	virtual Response* onAccept(Request* request) const {
		return request-&gt;respond();
	}
};

}  // namespace HTTP

}  // namespace Network

#endif /* SERVER_H_ */
</code></pre>
<p>Hilft nicht wirklich weiter, oder? ^^<br />
Die *.cpps sind bisher leer, also enthalten nur leere Methoden, der Code bisher ist in den Headern wie du oben siehst (dammit ich nicht ständig zwischen H und CPP umschalten muss.<br />
Aufrufe aus einer Main gibt es noch nicht, wird aber sowas wie</p>
<blockquote>
<p>Server *s = new MyServer(new EndPoint((char*)&quot;0.0.0.0&quot;, 80, EndPoint::TCP))-&gt;doListen()</p>
</blockquote>
<p>wobei MyServer</p>
<pre><code>class MyServer : public Server {
	Response* onAccept(Request* request) const {
		// Hier der code der abgeleiteten klasse was mit der HTTP Anfrage passieren soll, die Response generieren und zurückgeben (das -&gt;send() macht Server())
	}
}
</code></pre>
<p>sein wird. Der Code fehlt aber auch noch weil ich erst dieses Problem loswerden will *g*</p>
<p>Wie man sieht, es soll eine einfache synchrone HTTP Infrastruktur werden auf der ich aufbauen will.</p>
<p>Hilft dir das?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224297</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224297</guid><dc:creator><![CDATA[Verzweifelter]]></dc:creator><pubDate>Sun, 17 Jun 2012 19:24:16 GMT</pubDate></item><item><title><![CDATA[Reply to [GELÖST] Klassenmember mit Objektpointer im Parameter und Return on Sun, 17 Jun 2012 19:34:06 GMT]]></title><description><![CDATA[<p>zirkuläre inkludes</p>
<p>... hatten wir das nicht eben schon mal?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224302</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224302</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 17 Jun 2012 19:34:06 GMT</pubDate></item><item><title><![CDATA[Reply to [GELÖST] Klassenmember mit Objektpointer im Parameter und Return on Sun, 17 Jun 2012 19:47:13 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>zirkuläre inkludes</p>
<p>... hatten wir das nicht eben schon mal?</p>
</blockquote>
<p>Nicht hier. Und zirkulär trotz der #ifdef? Erklärung bitte <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/2224310</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224310</guid><dc:creator><![CDATA[Verzweifelter]]></dc:creator><pubDate>Sun, 17 Jun 2012 19:47:13 GMT</pubDate></item><item><title><![CDATA[Reply to [GELÖST] Klassenmember mit Objektpointer im Parameter und Return on Sun, 17 Jun 2012 20:06:02 GMT]]></title><description><![CDATA[<p>Verzweifelter schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>zirkuläre inkludes</p>
<p>... hatten wir das nicht eben schon mal?</p>
</blockquote>
<p>Nicht hier. Und zirkulär trotz der #ifdef? Erklärung bitte <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>
</blockquote>
<p>Stimmt, war <a href="http://www.c-plusplus.net/forum/304909" rel="nofollow">hier</a>. Include Guards verhindern das mehrfache Einbinden eines Headers, falls dieser mehrfach im Include-Graph vorkommt. Sie lösen nicht auf magische Weise gegenseitige Abhängigkeiten auf, die dein Code enthält. Und im Falle gegenseitiger Abhängigkeiten hängt die endgültige Reihenfolge davon ab, welcher Header zuerst eingebunden wird. Die zirkuläre Abhängigkeit muss nicht weiter erläutert werden: alle Header inkludieren, http.h, http.h inkludierte jeden Einzelheader...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224320</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 17 Jun 2012 20:06:02 GMT</pubDate></item><item><title><![CDATA[Reply to [GELÖST] Klassenmember mit Objektpointer im Parameter und Return on Sun, 17 Jun 2012 20:16:00 GMT]]></title><description><![CDATA[<p>HaHa</p>
<p>Sorry, ich mag Nelson sein Art <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/2224325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224325</guid><dc:creator><![CDATA[tommy_tom_tom]]></dc:creator><pubDate>Sun, 17 Jun 2012 20:16:00 GMT</pubDate></item><item><title><![CDATA[Reply to [GELÖST] Klassenmember mit Objektpointer im Parameter und Return on Mon, 18 Jun 2012 19:33:16 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Stimmt, war <a href="http://www.c-plusplus.net/forum/304909" rel="nofollow">hier</a>. Include Guards verhindern das mehrfache Einbinden eines Headers, falls dieser mehrfach im Include-Graph vorkommt. Sie lösen nicht auf magische Weise gegenseitige Abhängigkeiten auf, die dein Code enthält. Und im Falle gegenseitiger Abhängigkeiten hängt die endgültige Reihenfolge davon ab, welcher Header zuerst eingebunden wird. Die zirkuläre Abhängigkeit muss nicht weiter erläutert werden: alle Header inkludieren, http.h, http.h inkludierte jeden Einzelheader...</p>
</blockquote>
<p>Dank dir. Ich glaube da war ein kleines Missverständnis zwischen mir und dem wie Includes funktionieren.</p>
<p>Ich wollte alles möglichst übersichtlich halten und habe dadurch den Compiler bzw. Precompiler wohl verärgert.</p>
<p>Ich habe meine Konstrukte wie die HTTP.h entfernt und include in jeder datei genau das was sie zum funktionieren braucht, anstatt einfach diese gobale header einzubinden und schon löst sich das problem in Luft auf.</p>
<p>Server.h includes Request.h, Response.h<br />
Request.h includes Response.h<br />
und mein Programm includes einfach alle 3 weil ich dort gleichzeitig mit allen 3en arbeite und schon läuft es.</p>
<p><strong>Das eigentliche Problem war also nicht das Konstrukt</strong></p>
<pre><code>Response* onAccept(Request* request) {
		return request-&gt;respond();
	}
</code></pre>
<p>**</p>
<p>Sondern mein Pfusch bei den includes.**</p>
<p>Danke für die Erleuchtung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":-)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2224753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2224753</guid><dc:creator><![CDATA[Verzweifelter]]></dc:creator><pubDate>Mon, 18 Jun 2012 19:33:16 GMT</pubDate></item></channel></rss>