<?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[Logikfehler? Klasse]]></title><description><![CDATA[<p>Hallo.<br />
Ich habe ein Problem... Warscheinlich ist es ein Verständnisproblem oder ein logikfehler.</p>
<p>EDIT: Fehler gefunden <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="😃"
    /> Falscher Operator benutzt... Anstatt &quot;.&quot; muss man &quot;-&gt;&quot; benutzen, da f ja ein Pointer ist <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="🙂"
    /> Beitrag kann gelöscht werden</p>
<p>Hier habe ich eine EraseSharp.h:</p>
<pre><code class="language-cpp">#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;string&gt;

class EraseSharp
{
private:
	std::fstream *f;
	std::vector&lt;std::string&gt; lines;

public:
	EraseSharp(std::fstream stream);
	~EraseSharp();
	bool GetLines(std::string path);
};
</code></pre>
<p>und die dazugehörige EraseSharp.cpp:</p>
<pre><code class="language-cpp">#include &quot;EraseSharp.h&quot;

EraseSharp::EraseSharp(std::fstream stream)
:	f(&amp;stream)
{
}

EraseSharp::~EraseSharp()
{
	f.close(); //Hier ist ein Fehler
}

bool EraseSharp::GetLines(std::string path)
{
	if(f != NULL)
	{
		f.open(path.c_str(), std::ios_base::in | std::ios_base::out); //Hier ist ein Fehler
	}
	return 1;
}
</code></pre>
<p>Jetzt bekomme ich zwei Fehler. Ich habe im Quelltext markiert, wo sie sich befinden.<br />
Die Fehler:</p>
<pre><code>Fehler	1	error C2228: Links von &quot;.close&quot; muss sich eine Klasse/Struktur/Union befinden.
</code></pre>
<pre><code>Fehler	2	error C2228: Links von &quot;.open&quot; muss sich eine Klasse/Struktur/Union befinden.
</code></pre>
<p>Ich denke es ist einfach nur ein Verständnisproblem, was ich mit Klassen habe <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="😞"
    /><br />
Und der Sinn des Quelltextes sollte eigentlich keine Rolle spielen <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>
<p>Gruß Speedy_92</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/217734/logikfehler-klasse</link><generator>RSS for Node</generator><lastBuildDate>Fri, 09 Oct 2026 19:35:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/217734.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 10 Jul 2008 14:30:33 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Logikfehler? Klasse on Sat, 12 Jul 2008 20:27:11 GMT]]></title><description><![CDATA[<p>Hallo.<br />
Ich habe ein Problem... Warscheinlich ist es ein Verständnisproblem oder ein logikfehler.</p>
<p>EDIT: Fehler gefunden <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="😃"
    /> Falscher Operator benutzt... Anstatt &quot;.&quot; muss man &quot;-&gt;&quot; benutzen, da f ja ein Pointer ist <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="🙂"
    /> Beitrag kann gelöscht werden</p>
<p>Hier habe ich eine EraseSharp.h:</p>
<pre><code class="language-cpp">#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;string&gt;

class EraseSharp
{
private:
	std::fstream *f;
	std::vector&lt;std::string&gt; lines;

public:
	EraseSharp(std::fstream stream);
	~EraseSharp();
	bool GetLines(std::string path);
};
</code></pre>
<p>und die dazugehörige EraseSharp.cpp:</p>
<pre><code class="language-cpp">#include &quot;EraseSharp.h&quot;

EraseSharp::EraseSharp(std::fstream stream)
:	f(&amp;stream)
{
}

EraseSharp::~EraseSharp()
{
	f.close(); //Hier ist ein Fehler
}

bool EraseSharp::GetLines(std::string path)
{
	if(f != NULL)
	{
		f.open(path.c_str(), std::ios_base::in | std::ios_base::out); //Hier ist ein Fehler
	}
	return 1;
}
</code></pre>
<p>Jetzt bekomme ich zwei Fehler. Ich habe im Quelltext markiert, wo sie sich befinden.<br />
Die Fehler:</p>
<pre><code>Fehler	1	error C2228: Links von &quot;.close&quot; muss sich eine Klasse/Struktur/Union befinden.
</code></pre>
<pre><code>Fehler	2	error C2228: Links von &quot;.open&quot; muss sich eine Klasse/Struktur/Union befinden.
</code></pre>
<p>Ich denke es ist einfach nur ein Verständnisproblem, was ich mit Klassen habe <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="😞"
    /><br />
Und der Sinn des Quelltextes sollte eigentlich keine Rolle spielen <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>
<p>Gruß Speedy_92</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545131</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545131</guid><dc:creator><![CDATA[Speedy_92]]></dc:creator><pubDate>Sat, 12 Jul 2008 20:27:11 GMT</pubDate></item><item><title><![CDATA[Reply to Logikfehler? Klasse on Thu, 10 Jul 2008 14:42:23 GMT]]></title><description><![CDATA[<p>Speedy_92 schrieb:</p>
<blockquote>
<p>EDIT: Fehler gefunden <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="😃"
    /> Falscher Operator benutzt... Anstatt &quot;.&quot; muss man &quot;-&gt;&quot; benutzen, da f ja ein Pointer ist <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="🙂"
    /> Beitrag kann gelöscht werden</p>
</blockquote>
<p>Gelöscht wird hier so schnell nichts, ganz davon abgesehen habe ich eh noch Anmerkungen an dich:</p>
<p>1. Willst du wirklich ständig den stream und strings kopieren?</p>
<pre><code class="language-cpp">// 1.      Call by Value (Kopie)
EraseSharp(std::fstream stream);
// 2.      Call by Referenz
EraseSharp(std::fstream &amp; stream);
// 3.      Call by const Referenz
EraseSharp(std::fstream const &amp; stream);
</code></pre>
<p>Fall 1: Dies ist der Fall wie du einen Aufruf machst. Dies wird auch Call-By-Value genannt, und es wird der ursprüngliche Wert in eine neue Variable kopiert. Dies ist bei den Standardtypen wie int, long oder Zeigern in Ordnung, nicht aber bei Objekten.</p>
<p>Fall 2: Hierbei wird keine Kopie angelegt, sondern mit einer Referenz gearbeitet (Referenz = Aliasnamen einer bestehenden Variable). Eine Änderung an dieser Referenz wirkt sich auf die ursprüngliche Variable aus. Dies wird sowohl bei den Standardtypen wie auch Objekten verwendet wenn eine Änderung erwünscht ist (Bei dir eher nicht der Fall).</p>
<p>Fall 3: Dies sollte der Standard für Objektübergaben sein. Es wird auch hier mit einer Referenz gearbeitet, aber die direkte Änderung ist nicht möglich.</p>
<p>2. (Seltener Relevant, aber zur Ergänzung) Gegebenenfalls kann auch eine Referenz statt einen Zeiger Sinn machen sofern der Stream immer gesetzt sein muss, und das Objekt weder Kopier noch zuweisbar sein soll.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545142</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545142</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 10 Jul 2008 14:42:23 GMT</pubDate></item><item><title><![CDATA[Reply to Logikfehler? Klasse on Thu, 10 Jul 2008 15:39:01 GMT]]></title><description><![CDATA[<p>EDIT: Verdammt! Wie ich mich aufregen könnte <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="😃"
    /> Ich poste hier meinen Text und 2 min Später finde ich den Fehler -.-<br />
Einfach ein Tippfehler. Ich habe in der Klasse LoadRecource und beim Aufruf LoadResource geschrieben.<br />
Allerdings mit meiner Intellisense das ärgert mich trotzdem.</p>
<p>Vielen Dank. Ich habe den Code ein wenig abgeändert und erweitert.<br />
Nja. Jetzt habe ich aber ein anderes Problem <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 />
RemoveSharp.h</p>
<pre><code class="language-cpp">#include &lt;fstream&gt;
#include &lt;iostream&gt;
#include &lt;vector&gt;
#include &lt;string&gt;

class RemoveSharp
{
private:
	std::fstream f;
	std::vector&lt;std::string&gt; lines;
	std::string path;
	std::string content;

public:
	RemoveSharp();
	~RemoveSharp();
	bool LoadRecource(std::string path);
	void RemoveSharpLines();
	void SaveResource();
	void ToUpper();
};
</code></pre>
<p>RemoveSharp.cpp</p>
<pre><code class="language-cpp">#include &quot;RemoveSharp.h&quot;

RemoveSharp::RemoveSharp()
{
    path = &quot;&quot;;
    content = &quot;&quot;;
}

RemoveSharp::~RemoveSharp()
{
	if(f.is_open())
		f.close();
}

bool RemoveSharp::LoadRecource(std::string path)
{
		this-&gt;path = path;
		f.open(this-&gt;path.c_str(), std::ios_base::in | std::ios_base::out);
		std::string temp;
		while(std::getline(std::cin, temp))
		{
			lines.push_back(temp);
		}
		return 1;
	}
	return 0;

void RemoveSharp::RemoveSharpLines()
{
	for(std::vector&lt;std::string&gt;::iterator iter = lines.begin(); iter != lines.end(); iter++)
	{
		if((*iter)[1] == '#')
			lines.erase(iter);
	}

	for(unsigned int i = 0; i &lt; lines.size(); i++)
	{
		content += lines[i] + &quot;\n&quot;;
	}
}

void RemoveSharp::SaveResource()
{
	f.write(content.c_str(), content.size());
}

void RemoveSharp::ToUpper()
{
	for(unsigned int i = 0; i &lt; lines.size(); i++)
	{
		std::string temp = lines[i];
		for(unsigned int j = 0; j &lt; temp.size(); j++)
		{
			if(islower(temp[j]))
				toupper(temp[j]);
		}
	}
}
</code></pre>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &quot;RemoveSharp.h&quot;
#include &lt;fstream&gt;
#include &lt;iostream&gt;

int main()
{
	std::fstream f;
	RemoveSharp rs;
	rs.LoadResource(&quot;C:\\Florian\\Projekte\\C++ in Visual Studio\\C++ Primer\\EraseSharp\\Debug\\gcc.mak&quot;);

	return 0;
}
</code></pre>
<p>1. Meine Intellisense (Visual Studio) findet, wenn ich &quot;rs.&quot; eingeben nur irgendwelchen Schrott:<br />
Die private Variable f, den privaten vector lines, eine Methode RemoveSharps, eine Methode SetLines und den Destruktor...<br />
Dies sollte überhaupt nicht so sein, denn z.B. die Methode SetLines gibt es noch nicht mal mehr <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="😞"
    /><br />
2. Wenn ich mal einfach die Intellisense ignoriere und wie oben</p>
<pre><code class="language-cpp">rs.LoadResource(&quot;C:\\Florian\\Projekte\\C++ in Visual Studio\\C++ Primer\\EraseSharp\\Debug\\gcc.mak&quot;);
</code></pre>
<p>aufrufe bekomm ich einen Error:</p>
<pre><code>Fehler	1	error C2039: 'LoadResource': Ist kein Element von 'RemoveSharp'
</code></pre>
<p>Dies kann aber eigentlich nicht sein, da die Methode in RemoveSharp.h deklariert und RemoveSharp.cpp implementiert ist <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>
<p>Gruß Speedy_92</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545178</guid><dc:creator><![CDATA[Speedy_92]]></dc:creator><pubDate>Thu, 10 Jul 2008 15:39:01 GMT</pubDate></item><item><title><![CDATA[Reply to Logikfehler? Klasse on Thu, 10 Jul 2008 15:58:17 GMT]]></title><description><![CDATA[<p>Speedy_92 schrieb:</p>
<blockquote>
<p>...Intellisense das ärgert mich...</p>
</blockquote>
<p>Unter Umständen funktioniert die Aktualisierung nicht, ggf. hilft ein &quot;Rebuild All&quot; ansonsten manuell aus dem Projektverzeichnis die, ich glaube *.nsb oder so ählich - Datei löschen, und anschließend nochmal neu linken.</p>
<p>In dem Fall fehlt aber wohl einfach eine Schließende } hinter der Methode &quot;LoadRessource&quot;, bzw. ein return 0 zuviel. Immer sauber einrücken dann sieht man dies auch.</p>
<p>Zu deinem Code, Ich würde dennoch Objekte mit const Referenz übergeben:</p>
<pre><code class="language-cpp">bool RemoveSharp::LoadRecource(std::string &amp; const path) // &lt;-- Keine unnötige Kopie
{
  this-&gt;path = path;
  f.open(this-&gt;path.c_str(), std::ios_base::in | std::ios_base::out);
  std::string temp;
  while(std::getline(std::cin, temp))
  {
     lines.push_back(temp);
  }
  return 1;
  // }          &lt;-- Auskommentiert: Copy-Paste-Fehler?
  // return 0;  &lt;-- Auskommentiert: Copy-Paste-Fehler?
} //            &lt;-- Hinzugefügt
</code></pre>
<p>Des weiteren:</p>
<pre><code class="language-cpp">void RemoveSharp::RemoveSharpLines()
{
  // 1. Du hast in deiner Version pro Schleifendurchlauf einmal lines.end()
  //    aufgerufen, was unnötig ist
  // 2. Besster ++iter als iter++ (ggf. ein temporärer Wert pro Durchgang
  //    weniger
  for(std::vector&lt;std::string&gt;::iterator iter = lines.begin(), end = lines.end();
    iter != end; ++iter)
  // ...
  // Hier ebenso:
  for(unsigned int i = 0, size = lines.size(); i &lt; size; ++i)
  // ...
</code></pre>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545196</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545196</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 10 Jul 2008 15:58:17 GMT</pubDate></item><item><title><![CDATA[Reply to Logikfehler? Klasse on Thu, 10 Jul 2008 16:45:01 GMT]]></title><description><![CDATA[<p>Vielen Dank. Ich habe es geändert. Aber das mit der Klammer &quot;}&quot; scheint ein copy-paste Fehler gewesen zu sein...<br />
Ich habe leider ein Inhaltliches Problem.<br />
Ich habe den Code gedebuggt und an dieser Stelle bleibt er im Code einfach stehen (RemoveSharp.cpp -&gt;LoadResource):</p>
<pre><code class="language-cpp">while(std::getline(std::cin, temp))
</code></pre>
<p>Der Debugger lässt sich nicht weiterschieben und der Fokus geht auf die Console über, wo sich leider nichts tut. Ich kann auch nicht weiterdebuggen...<br />
Aber die Datei existiert. Ich weiß leider nicht wo mein Fehler steckt.</p>
<p>PS: Das mit der nbs-Datei hat super funktioniert <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="👍"
    /> <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>
<p>Gruß Speedy_92</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545221</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545221</guid><dc:creator><![CDATA[Speedy_92]]></dc:creator><pubDate>Thu, 10 Jul 2008 16:45:01 GMT</pubDate></item><item><title><![CDATA[Reply to Logikfehler? Klasse on Fri, 11 Jul 2008 07:00:23 GMT]]></title><description><![CDATA[<p>Speedy_92 schrieb:</p>
<blockquote>
<p>Vielen Dank. Ich habe es geändert. Aber das mit der Klammer &quot;}&quot; scheint ein copy-paste Fehler gewesen zu sein...<br />
Ich habe leider ein Inhaltliches Problem.<br />
Ich habe den Code gedebuggt und an dieser Stelle bleibt er im Code einfach stehen (RemoveSharp.cpp -&gt;LoadResource):</p>
<pre><code class="language-cpp">while(std::getline(std::cin, temp))
</code></pre>
<p>Der Debugger lässt sich nicht weiterschieben und der Fokus geht auf die Console über, wo sich leider nichts tut. Ich kann auch nicht weiterdebuggen...<br />
Aber die Datei existiert. Ich weiß leider nicht wo mein Fehler steckt.</p>
<p>PS: Das mit der nbs-Datei hat super funktioniert <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="👍"
    /> <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>
<p>Gruß Speedy_92</p>
</blockquote>
<p>Du willst doch von deinem File lesen, oder?</p>
<p>Dann sollte das</p>
<pre><code class="language-cpp">while(std::getline(std::cin, temp))
</code></pre>
<p>so heißen</p>
<pre><code class="language-cpp">while(std::getline(f, temp))
</code></pre>
<p>Gruß<br />
Tobi</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545466</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545466</guid><dc:creator><![CDATA[Tobias Gerg]]></dc:creator><pubDate>Fri, 11 Jul 2008 07:00:23 GMT</pubDate></item><item><title><![CDATA[Reply to Logikfehler? Klasse on Fri, 11 Jul 2008 09:51:52 GMT]]></title><description><![CDATA[<p>Ups... Sry. Kam warscheinlich weil ich mir grad ein Tut über strings noch einmal angeschaut habe, wo grade</p>
<pre><code class="language-cpp">std::getline(std::cin, bla)
</code></pre>
<p>erklärt wurde...<br />
Aber trotzdem danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545551</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545551</guid><dc:creator><![CDATA[Speedy_92]]></dc:creator><pubDate>Fri, 11 Jul 2008 09:51:52 GMT</pubDate></item><item><title><![CDATA[Reply to Logikfehler? Klasse on Fri, 11 Jul 2008 10:14:51 GMT]]></title><description><![CDATA[<p>Tut mir leid, wenn ich nerve <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 />
Aber ich habe jetzt ein Runtime Problem. Es tritt an dieser Stelle auf:</p>
<pre><code class="language-cpp">lines.erase(iter);
</code></pre>
<p>in void RemoveSharp::RemoveSharpLines() in der RemoveSharp.cpp.<br />
Aber in dem vector lines sind alle Zeilen richtig reingeladen worden...</p>
<p>Folgendes Problem (Kann man hier keine Bilder einfügen?, dann halt der externe Link):<a href="http://www.imgbox.de/users/public/images/x12803l214.jpg" rel="nofollow">klick me</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545561</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545561</guid><dc:creator><![CDATA[Speedy_92]]></dc:creator><pubDate>Fri, 11 Jul 2008 10:14:51 GMT</pubDate></item><item><title><![CDATA[Reply to Logikfehler? Klasse on Fri, 11 Jul 2008 10:47:51 GMT]]></title><description><![CDATA[<p>Speedy_92 schrieb:</p>
<blockquote>
<p>Tut mir leid, wenn ich nerve <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 />
Aber ich habe jetzt ein Runtime Problem. Es tritt an dieser Stelle auf:</p>
</blockquote>
<p>ahh, ganz übersehener Anfängerfehler:<br />
Du kannst nicht ohne weiteres innerhalb einer Schleife über eine Liste iterieren und Einträge löschen. Den jedes hinzufügen und löschen kann den Interator ungültig machen! (Dies ist dein Problem).</p>
<p>Um es verständlicher zu machen, ein Beispiel am Vector. Ein Vector ist ein zusammenhängender Speicherbereich:</p>
<pre><code class="language-cpp">Iteratorposition
                              |
Vectorinterner Zeiger ---&gt; [1|2|3|4|5]
</code></pre>
<p>Bei jedem Löschen oder Einfügen kann der Speicherbereich des Vektors geändert werden (An eine andere Adresse kopiert und angepasst), zudem ist nicht ganz klar wohin nach einem Löschen - selbst wenn der Speicherbereich identisch bleiben würde - der Iterator zeigen sollte.</p>
<p>cu André</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545590</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Fri, 11 Jul 2008 10:47:51 GMT</pubDate></item><item><title><![CDATA[Reply to Logikfehler? Klasse on Fri, 11 Jul 2008 11:21:21 GMT]]></title><description><![CDATA[<p>Nimm ein einfaches Prädikat dafür:</p>
<pre><code class="language-cpp">bool startsWithSharp(const std::string&amp; str)
{
   return str[1] == '#';
}

void RemoveSharp::RemoveSharpLines()
{
    lines.erase(std::remove_if(lines.begin(), lines.end(), startsWithSharp));
    ///...
}
</code></pre>
<p>(Soll eigentlich wirklich das zweite Zeichen auf '#' überprüft werden ?<br />
Das erste Zeichen wäre 'str[0]' !)</p>
<p>Siehe auch &quot;Effective STL&quot; von Scott Meyers</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545609</guid><dc:creator><![CDATA[bladerunner10]]></dc:creator><pubDate>Fri, 11 Jul 2008 11:21:21 GMT</pubDate></item><item><title><![CDATA[Reply to Logikfehler? Klasse on Fri, 11 Jul 2008 11:36:10 GMT]]></title><description><![CDATA[<p>Ja, das 2. Zeichen soll entfernt werden. Und wozu ist der 2. Parameter char c?<br />
Der ist doch völlig unnötig.<br />
Tut mir leid, aber was muss ich denn als 3. Parameter angeben in remove_if...<br />
Ich habe schon in der Referenz geschaut, aber das hat mir nicht weitergeholfen, da du hier startsWithSharp als Parameter angegeben hast, was bei mir nicht funktioniert...</p>
<pre><code>&quot;RemoveSharp::startsWithSharp&quot;: Dem Funktionsaufruf fehlt die Argumentliste. Verwenden Sie &quot;&amp;RemoveSharp::startsWithSharp&quot;, um einen Zeiger auf den Member zu erstellen.
</code></pre>
<p>Weil ich wüsste auch ehrlich gesagt nicht, was ich bei startsWithSharp als Parameter angeben muss, weil ich kann ja lines nicht durchiterieren...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1545617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1545617</guid><dc:creator><![CDATA[Speedy_92]]></dc:creator><pubDate>Fri, 11 Jul 2008 11:36:10 GMT</pubDate></item><item><title><![CDATA[Reply to Logikfehler? Klasse on Sat, 12 Jul 2008 20:27:45 GMT]]></title><description><![CDATA[<p>*push* <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/1546427</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1546427</guid><dc:creator><![CDATA[Speedy_92]]></dc:creator><pubDate>Sat, 12 Jul 2008 20:27:45 GMT</pubDate></item><item><title><![CDATA[Reply to Logikfehler? Klasse on Sun, 13 Jul 2008 09:36:35 GMT]]></title><description><![CDATA[<p>Ein Funktionsobjekt, oder eine Funktion.</p>
<p>Hier auch mit einem Beispiel:</p>
<p><a href="http://www.cplusplus.com/reference/algorithm/remove_if.html" rel="nofollow">http://www.cplusplus.com/reference/algorithm/remove_if.html</a></p>
<p>Für Funktionsobjekt google mal nach Funktor/Funktionsobjekt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1546530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1546530</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sun, 13 Jul 2008 09:36:35 GMT</pubDate></item><item><title><![CDATA[Reply to Logikfehler? Klasse on Sun, 13 Jul 2008 11:58:47 GMT]]></title><description><![CDATA[<p>Ich habe in einem <a href="http://www.cpp-tutor.de/cpp/le18/le18_03.htm" rel="nofollow">Tutorial</a> folgenden Satz als Definition eines Functors gesehn:</p>
<pre><code>Funktionsobjekte sind Objekte, deren Klasse den Operator () überlädt. Nachfolgend ist ein Beispiel für einen solchen Functor aufgeführt. Er soll dazu dienen, die Werte der Elemente in einem Container zu begrenzen.
</code></pre>
<p>Allerdings sehe ich in dem <a href="http://www.cplusplus.com/reference/algorithm/remove_if.html" rel="nofollow">remove_if-Beispiel</a> nichts von Operatorüberladung... oder bin ich etwa blind?</p>
<p>In dem <a href="http://de.wikipedia.org/wiki/C%2B%2B-Standardbibliothek#Funktionsobjekte" rel="nofollow">Wikipedia-Artikel</a> wird die Operator-Überladung wiederum bestätigt:</p>
<pre><code>Bei Funktionsobjekten oder Funktoren handelt es sich um Objekte, die genauso aufgerufen werden können wie Funktionen. Bei ihnen ist der Funktionsoperator () mit der Operatorfunktion „operator()“ überladen. Es sind Objekte, die sich wie Funktionen verhalten, aber trotzdem alle Eigenschaften von Objekten haben. Bei den Funktionsobjekten gibt es folgende Kategorien:

    * Generatoren ohne Funktionsparameter „f()“
    * Unäre Funktionen mit einem Funktionsparameter „f(x)“
    * Binäre Funktionen mit zwei Funktionsparametern „f(x,y)“
</code></pre>
<p>Deswegen habe ich es noch nicht verstanden, da die beiden Beispiele unterschiedlich sind und (für mich) keine Gemeinsamkeiten in Sachen Functor haben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1546597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1546597</guid><dc:creator><![CDATA[Speedy_92]]></dc:creator><pubDate>Sun, 13 Jul 2008 11:58:47 GMT</pubDate></item><item><title><![CDATA[Reply to Logikfehler? Klasse on Mon, 14 Jul 2008 10:57:17 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Speedy_92 schrieb:</p>
<blockquote>
<p>Allerdings sehe ich in dem remove_if-Beispiel nichts von Operatorüberladung...</p>
</blockquote>
<p>Da wird auch kein Funktor eingesetzt, sondern ein(e) (Zeiger auf eine) globale Funktion, die/der ebenfalls als Argument für <em>remove_if</em> verwendet werden darf. Also stimmt schon, was <em>drakon</em> geschrieben hat:</p>
<p>drakon schrieb:</p>
<blockquote>
<p>Ein Funktionsobjekt, <strong>oder eine Funktion</strong>.</p>
</blockquote>
<p>MfG,</p>
<p>Probe-Nutzer</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1547027</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1547027</guid><dc:creator><![CDATA[Probe-Nutzer]]></dc:creator><pubDate>Mon, 14 Jul 2008 10:57:17 GMT</pubDate></item><item><title><![CDATA[Reply to Logikfehler? Klasse on Wed, 16 Jul 2008 17:54:25 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe gerade ein wenig im Forum gestöbert und eine viel einfachere Methode gefunden, um ein Element aus einem std::vector zu löschen. Hier ein kleines ungetestetes Beispiel:</p>
<pre><code class="language-cpp">std::vector&lt;int&gt; my_vec;

my_vec.push_back(1);
my_vec.push_back(2);
my_vec.push_back(3);
my_vec.push_back(4);
my_vec.push_back(5);

std::vector&lt;int&gt;::iterator iter = my_vec.begin();
while(iter != my_vec.end())
{
    if((*iter) == 4)
        iter = my_vec.erase(iter);
    else
        iter++;
}
</code></pre>
<p>Weil erase einen Iterator auf das nachfolgende Element angibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1548416</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548416</guid><dc:creator><![CDATA[Speedy_92]]></dc:creator><pubDate>Wed, 16 Jul 2008 17:54:25 GMT</pubDate></item><item><title><![CDATA[Reply to Logikfehler? Klasse on Wed, 16 Jul 2008 20:39:56 GMT]]></title><description><![CDATA[<p>Speedy_92 schrieb:</p>
<blockquote>
<p>Hallo,<br />
ich habe gerade ein wenig im Forum gestöbert und eine viel einfachere Methode gefunden, um ein Element aus einem std::vector zu löschen. Hier ein kleines</p>
</blockquote>
<p>Ja. Das wird so auch viel gemacht, jedeoch ist das nicht sehr elegant. Die Methode über Funktionsobjekte/Funktionen ist dem eigentlich zu bevorzugen, aber schlussendlich deine Entscheidung. <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/1548514</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548514</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Wed, 16 Jul 2008 20:39:56 GMT</pubDate></item><item><title><![CDATA[Reply to Logikfehler? Klasse on Thu, 17 Jul 2008 09:03:58 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Speedy_92 schrieb:</p>
<blockquote>
<p>Hallo,<br />
ich habe gerade ein wenig im Forum gestöbert und eine viel einfachere Methode gefunden, um ein Element aus einem std::vector zu löschen. Hier ein kleines</p>
</blockquote>
<p>Ja. Das wird so auch viel gemacht, jedeoch ist das nicht sehr elegant. Die Methode über Funktionsobjekte/Funktionen ist dem eigentlich zu bevorzugen, aber schlussendlich deine Entscheidung. <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>Es ist nicht nur nicht elegant, es ist auch ineffizient. Da die Komplexität eines einzelnen erase jeweils linear bzgl. der Distanz zum Ende des vectors ist, hat man im schlimmsten Fall eine quadratische Komplexität für den gesamten Vorgang. remove_if und das folgende erase haben aber jeweils nur lineare Komplexität.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1548675</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1548675</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 17 Jul 2008 09:03:58 GMT</pubDate></item></channel></rss>