<?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[Ich schlachte meinen C-Compiler!! (kompilierfehler)]]></title><description><![CDATA[<p>Hallo zusammen,<br />
ich packs nicht mehr, was will der von mir !?!?!?</p>
<p>Ich krisch hier Fehlermeldungen die ich als Java Programmierer einfach nicht verstehe! Das geht über meinen Horizont!</p>
<p>Falls sich jmd mal bitte diesen Code angucken könnte und mir sagen könnte wo da der Kompilierfehler steckt, dann bin ich ihm zutiefst verbunden und helfe auch gerne bei jedem Java Problem dieser Art!</p>
<p>#########################<br />
HEADER:<br />
#########################<br />
#ifndef _TERMINV_H<br />
#define _TERMINV_H<br />
#include &lt;list&gt;<br />
#include &quot;termin.h&quot;<br />
using namespace std;</p>
<p>class CTerminV {<br />
protected:<br />
list&lt;CTermin&gt; termine;<br />
string dateiName;</p>
<p>public:<br />
list&lt;CTermin&gt;::iterator getTerminIterator(const unsigned long _id);<br />
CTermin *getTermin(const unsigned long _id);<br />
void terminEinfuegen(CTermin &amp;t);<br />
bool terminLoeschen(const unsigned long _id);<br />
}<br />
#endif // _TERMINV_H</p>
<p>#########################<br />
CLASS:<br />
#########################<br />
#include &quot;terminv.h&quot;</p>
<p>list&lt;CTermin&gt;::iterator CTerminV::getTerminIterator(const unsigned long _id) {<br />
list&lt;CTermin&gt;::iterator it = Termine.begin();<br />
while (it != this-&gt;Termine.end()) {<br />
if (it.getId() == _id) {<br />
return it;<br />
}<br />
it++;<br />
}<br />
return null;<br />
};</p>
<p>CTermin* CTerminV::getTermin(const unsigned long _id) {<br />
list&lt;CTermin&gt;::iterator it = Termine.begin();<br />
while (it != this-&gt;Termine.end()) {<br />
if (it.getId() == _id) {<br />
return new CTermin(*it);<br />
}<br />
else {<br />
return null;<br />
}<br />
}<br />
};</p>
<p>void CTerminV::terminEinfuegen(CTermin &amp;t) {<br />
t.setNeueId();<br />
this-&gt;Termine.push_back(t);<br />
this-&gt;Termine.sort();<br />
};</p>
<p>bool CTerminV::terminLoeschen(unsigned long _id) {<br />
list&lt;CTermin&gt;::iterator it = getTerminIterator(_id);<br />
if (it != null) {<br />
this-&gt;Termine.erase(it);<br />
return true;<br />
} else {<br />
return false;<br />
}<br />
};</p>
<p>und das ist ein Fehler den er ausspuckt, aber ich habe schon festgestellt das er manchmal an stellen meckert wo gar nicht das Problem liegt.</p>
<p>Error 2 error C2143: syntax error : missing ';' before 'CTerminV::getTerminIterator' d:\home\fg\visual studio codename orcas\projects\pse1\projekt\ms\termin\libterminv\terminv.cpp 3 libTerminV</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/189330/ich-schlachte-meinen-c-compiler-kompilierfehler</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 11:08:08 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/189330.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 11 Aug 2007 13:27:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Ich schlachte meinen C-Compiler!! (kompilierfehler) on Sat, 11 Aug 2007 13:27:26 GMT]]></title><description><![CDATA[<p>Hallo zusammen,<br />
ich packs nicht mehr, was will der von mir !?!?!?</p>
<p>Ich krisch hier Fehlermeldungen die ich als Java Programmierer einfach nicht verstehe! Das geht über meinen Horizont!</p>
<p>Falls sich jmd mal bitte diesen Code angucken könnte und mir sagen könnte wo da der Kompilierfehler steckt, dann bin ich ihm zutiefst verbunden und helfe auch gerne bei jedem Java Problem dieser Art!</p>
<p>#########################<br />
HEADER:<br />
#########################<br />
#ifndef _TERMINV_H<br />
#define _TERMINV_H<br />
#include &lt;list&gt;<br />
#include &quot;termin.h&quot;<br />
using namespace std;</p>
<p>class CTerminV {<br />
protected:<br />
list&lt;CTermin&gt; termine;<br />
string dateiName;</p>
<p>public:<br />
list&lt;CTermin&gt;::iterator getTerminIterator(const unsigned long _id);<br />
CTermin *getTermin(const unsigned long _id);<br />
void terminEinfuegen(CTermin &amp;t);<br />
bool terminLoeschen(const unsigned long _id);<br />
}<br />
#endif // _TERMINV_H</p>
<p>#########################<br />
CLASS:<br />
#########################<br />
#include &quot;terminv.h&quot;</p>
<p>list&lt;CTermin&gt;::iterator CTerminV::getTerminIterator(const unsigned long _id) {<br />
list&lt;CTermin&gt;::iterator it = Termine.begin();<br />
while (it != this-&gt;Termine.end()) {<br />
if (it.getId() == _id) {<br />
return it;<br />
}<br />
it++;<br />
}<br />
return null;<br />
};</p>
<p>CTermin* CTerminV::getTermin(const unsigned long _id) {<br />
list&lt;CTermin&gt;::iterator it = Termine.begin();<br />
while (it != this-&gt;Termine.end()) {<br />
if (it.getId() == _id) {<br />
return new CTermin(*it);<br />
}<br />
else {<br />
return null;<br />
}<br />
}<br />
};</p>
<p>void CTerminV::terminEinfuegen(CTermin &amp;t) {<br />
t.setNeueId();<br />
this-&gt;Termine.push_back(t);<br />
this-&gt;Termine.sort();<br />
};</p>
<p>bool CTerminV::terminLoeschen(unsigned long _id) {<br />
list&lt;CTermin&gt;::iterator it = getTerminIterator(_id);<br />
if (it != null) {<br />
this-&gt;Termine.erase(it);<br />
return true;<br />
} else {<br />
return false;<br />
}<br />
};</p>
<p>und das ist ein Fehler den er ausspuckt, aber ich habe schon festgestellt das er manchmal an stellen meckert wo gar nicht das Problem liegt.</p>
<p>Error 2 error C2143: syntax error : missing ';' before 'CTerminV::getTerminIterator' d:\home\fg\visual studio codename orcas\projects\pse1\projekt\ms\termin\libterminv\terminv.cpp 3 libTerminV</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342718</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342718</guid><dc:creator><![CDATA[klimmbimm]]></dc:creator><pubDate>Sat, 11 Aug 2007 13:27:26 GMT</pubDate></item><item><title><![CDATA[Reply to Ich schlachte meinen C-Compiler!! (kompilierfehler) on Sat, 11 Aug 2007 13:33:40 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>class ...<br />
bool terminLoeschen(const unsigned long _id);<br />
} <strong>;</strong></p>
<p>Java Leute brauchen das Semikolon nicht. Außerdem C++ Compiler und Codetags benutzen ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342720</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342720</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 11 Aug 2007 13:33:40 GMT</pubDate></item><item><title><![CDATA[Reply to Ich schlachte meinen C-Compiler!! (kompilierfehler) on Sat, 11 Aug 2007 13:52:48 GMT]]></title><description><![CDATA[<p>also erstmal:</p>
<p>Header</p>
<pre><code class="language-cpp">#ifndef _TERMINV_H
#define _TERMINV_H
#include &lt;list&gt;
#include &quot;termin.h&quot;
// using namespace std; - kein using im Header führt zu Abhängigkeiten von der Includereihenfolge

class CTerminV {
  protected:
    std::list&lt;CTermin&gt; termine;
    std::string dateiName;

  public:
    std::list&lt;CTermin&gt;::iterator getTerminIterator(const unsigned long _id);
    CTermin *getTermin(const unsigned long _id);  
    void terminEinfuegen(CTermin &amp;t);
    bool terminLoeschen(const unsigned long _id);
}; // &lt;-- hier kommt ein Strichpunkt hin

#endif // _TERMINV_H
</code></pre>
<p>Quelldatei (ist nicht abhängig von Klassen wie in Java)</p>
<pre><code class="language-cpp">#include &quot;terminv.h&quot;

using namespace std; // hier meinetwegen

list&lt;CTermin&gt;::iterator CTerminV::getTerminIterator(const unsigned long _id) {
  list&lt;CTermin&gt;::iterator it = Termine.begin();
  while (it != this-&gt;Termine.end()) {
    if (it-&gt;getId() == _id) { // &lt;-- da it ein iterator ist braucht man den indirekten Zugriffsoperator &quot;-&gt;&quot; und nicht &quot;.&quot; it-&gt;getId() ist äquivalent zu (*it).getId(); 
      return it;
    }
    it++;
  }
  return NULL;
} // &lt;-- den ; brauchst du in C++  nicht (in Java auch nicht)

CTermin* CTerminV::getTermin(const unsigned long _id) {
  list&lt;CTermin&gt;::iterator it = Termine.begin();
  while (it != this-&gt;Termine.end()) {
    if (it-&gt;getId() == _id) { // das gleiche wie vorhin
      return new CTermin(*it); //achtung jeder mit new angeforderte Speicher muss auch mit delete wieder freigegeben werden sonst hast du ein Speicherleck
    }
    else {
      return NULL; //&lt;-- groß schreiben oder gleich einfach nur 0 nehmen
    }
  }
}

void CTerminV::terminEinfuegen(CTermin &amp;t) {
  t.setNeueId();
  this-&gt;Termine.push_back(t);
  this-&gt;Termine.sort();
}

bool CTerminV::terminLoeschen(unsigned long _id) {
  list&lt;CTermin&gt;::iterator it = getTerminIterator(_id);
  if (it != NULL) { //&lt;-- ein Iterator ist nicht zwangsläufig ein Zeiger
    this-&gt;Termine.erase(it);
    return true;
  } 
  else {
    return false;
  }
}
</code></pre>
<p>Das waren nur n paar Fehler die ich ausgebessert habe, du solltest dir die STL insbesondere den list&lt;&gt; Container und die ITeratoren nochmal anschauen.<br />
Und natürlich das ganze mit nem C++ Compiler compilieren und nicht mit nem C-Compiler <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/1342725</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342725</guid><dc:creator><![CDATA[Checker*amp*Murckser]]></dc:creator><pubDate>Sat, 11 Aug 2007 13:52:48 GMT</pubDate></item><item><title><![CDATA[Reply to Ich schlachte meinen C-Compiler!! (kompilierfehler) on Sat, 11 Aug 2007 14:33:40 GMT]]></title><description><![CDATA[<p>Warte mal ... da hat dein Programm aber nen paar logische Schwachstellen ^^</p>
<pre><code class="language-cpp">CTermin* CTerminV::getTermin(const unsigned long _id) {
  list&lt;CTermin&gt;::iterator it = Termine.begin();
  while (it != this-&gt;Termine.end()) {
    if (it-&gt;getId() == _id) { // das gleiche wie vorhin
      return new CTermin(*it); //achtung jeder mit new angeforderte Speicher muss auch mit delete wieder freigegeben werden sonst hast du ein Speicherleck
    }
    else {
      return NULL; //&lt;-- groß schreiben oder gleich einfach nur 0 nehmen
    }
  }
}
</code></pre>
<p>...<br />
entspricht:</p>
<pre><code class="language-cpp">CTermin* CTerminV::getTermin(unsigned long id) 
{
    if ((*(Termine.begin())).getId() == _id))
        return new CTermin(*(Termine.begin()));
    return NULL;
}
</code></pre>
<p>... ich denke mal eher das du nach id suchen willst?</p>
<pre><code class="language-cpp">bool CTerminV::getTermin(unsigned long id) 
{
    for (std::list&lt;CTermin&gt;::iterator it = m_Termine.begin(); it != m_Termine.end(); ++it) if ((*it).GetId() == id) { termin = (*it); return true; }
    return false;
}
</code></pre>
<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342744</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342744</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sat, 11 Aug 2007 14:33:40 GMT</pubDate></item><item><title><![CDATA[Reply to Ich schlachte meinen C-Compiler!! (kompilierfehler) on Sat, 11 Aug 2007 14:39:48 GMT]]></title><description><![CDATA[<p>Darum gefällt mir der indirekte ZUgriffsoperator besser als Klammern und &quot;.&quot;:</p>
<p>(D)Evil schrieb:</p>
<blockquote>
<pre><code class="language-cpp">CTermin* CTerminV::getTermin(unsigned long id) 
{
    if ( (*(Termine.begin())).getId() == _id ) // &lt;-- hier war ne Klammer zuviel
        return new CTermin(*(Termine.begin()));
    return NULL;
}
</code></pre>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1342747</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342747</guid><dc:creator><![CDATA[Checker*amp*Murckser]]></dc:creator><pubDate>Sat, 11 Aug 2007 14:39:48 GMT</pubDate></item><item><title><![CDATA[Reply to Ich schlachte meinen C-Compiler!! (kompilierfehler) on Sat, 11 Aug 2007 14:44:03 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#ifndef TERMIN_MANAGER_H__INCLUDED
#define TERMIN_MANAGER_H__INCLUDED

#include &lt;list&gt;
#include &quot;termin.h&quot;

class TerminManager 
{
public:
    Termin&amp;		get_termin(unsigned long);  
	Termin const &amp;	get_termin(unsigned long) const;
    void		add_termin(const Termin&amp;);
    void		delete_termin(unsigned long);

private:
	std::list&lt;Termin&gt;	m_items;
	std::string			m_filename;
};

#endif // TERMIN_MANAGER_H__INCLUDED
</code></pre>
<pre><code class="language-cpp">Termin&amp; TerminManager::get_termin(unsigned long id)
{
	for (std::list&lt;Termin&gt;::iterator it = m_items.begin(); it != m_items.end(); ++it)
		if ((*it).get_id() == id)
			return (*it);
	throw std::invalid_argument(&quot;Item does not exist&quot;);
}

Termin const&amp; TerminManager::get_termin(unsigned long id) const
{
	for (std::list&lt;Termin&gt;::const_iterator it = m_items.begin(); it != m_items.end(); ++it)
		if ((*it).get_id() == id)
			return (*it);

	throw std::invalid_argument(&quot;Item does not exist&quot;);
}

void TerminManager::add_termin(const Termin&amp; termin)
{	
	m_items.push_back(termin);	
}

void TerminManager::delete_termin(unsigned long id)
{
	for (std::list&lt;Termin&gt;::iterator it = m_items.begin(); it != m_items.end(); ++it)
		if ((*it).get_id() == id)
		{
			m_items.erase(it);
			return;
		}
	throw std::invalid_argument(&quot;Item does not exist&quot;);
}
</code></pre>
<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342749</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342749</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sat, 11 Aug 2007 14:44:03 GMT</pubDate></item><item><title><![CDATA[Reply to Ich schlachte meinen C-Compiler!! (kompilierfehler) on Sat, 11 Aug 2007 18:14:38 GMT]]></title><description><![CDATA[<p>klimmbimm schrieb:</p>
<blockquote>
<p>...<br />
void CTerminV::terminEinfuegen(CTermin &amp;t) {<br />
t.setNeueId();<br />
this-&gt;Termine.push_back(t);<br />
this-&gt;Termine.sort();<br />
};<br />
...</p>
</blockquote>
<p>Also wenn die Teile beim Einfügen sortieren möchtest, solltest Du über std:.set bzw. std::multiset (oder map/multimap) nachdenken. Die macht das automatisch für Dich.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342875</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342875</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Sat, 11 Aug 2007 18:14:38 GMT</pubDate></item><item><title><![CDATA[Reply to Ich schlachte meinen C-Compiler!! (kompilierfehler) on Sat, 11 Aug 2007 18:38:18 GMT]]></title><description><![CDATA[<p>vielen dank für alle antworten!<br />
das gibt mir hoffnung zum weiterhacken :), werde morgen weitermachen und berichten!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1342887</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1342887</guid><dc:creator><![CDATA[klimmbimmNoLogin]]></dc:creator><pubDate>Sat, 11 Aug 2007 18:38:18 GMT</pubDate></item><item><title><![CDATA[Reply to Ich schlachte meinen C-Compiler!! (kompilierfehler) on Sun, 12 Aug 2007 17:11:27 GMT]]></title><description><![CDATA[<p>@Checker&amp;Murckser<br />
Danke nochmal und die std und list dinger kann ich mir leider nicht nochmal anschauen, dazu fehlt mir die motivation <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="😉"
    /><br />
Ich bin eingefleischter Java Programmierer und wir machen diese Terminverwaltung gerade an der fh.<br />
Ich mache ein berufsbegleitendes studium und arbeite seit jahren nur mit java, deswegen bin ich schon froh (und das reicht mir auch) wenn ich dann bald C++ code wenigstens lesen kann.<br />
Also wenn du hilfe in Java brauchst einfach pm schicken.</p>
<p>@Evil<br />
Ja da hast du recht da war ich wohl etwas hektisch und wollte wohl nachhause <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="😉"
    /><br />
Habs ausgebessert, danke!<br />
Wenns nach mir ginge würde ich auch lieber in englisch hacken und das mit den exceptions sieht auch besser aus als mein code, aber unser dozent wollte uns wohl nicht überfordern da wir auch anfänger im kurs haben.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/734">@simon</a><br />
tjo sag das mal unserem dozent <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="😉"
    /><br />
der scheint wohl nicht ganz auf dem laufenden zu sein, ich werd bei der nächsten vorlesung mal klugscheißen und ihn fragen <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>So und nun *trommelwirbel* kommt meine komplette Terminverwaltung (inklusive kompilierfehlern natürlich)</p>
<p>HEADER:</p>
<pre><code class="language-cpp">#ifndef _TERMINV_H
#define _TERMINV_H
#include &lt;list&gt;
#include &quot;termin.h&quot;

class CTerminV {

protected:
	list&lt;CTermin&gt; termine;
	string dateiName;

public:
	list&lt;CTermin&gt;::iterator getTerminIterator(const unsigned long _id);
	CTermin *getTermin(const unsigned long _id);
	void terminEinfuegen(CTermin &amp;t);
	bool terminLoeschen(const unsigned long _id);
	bool terminBearbeiten(CTermin &amp;t);
	string terminAnzeigen(const unsigned long _id);
	void getTermine(list&lt;CTermin&gt; &amp;_terminList, CDatumUhrzeit _von, CDatumUhrzeit _bis);
	string getDateiName();
	void setDateiName(string _s);
	bool terminListeSpeichern(string _dateiName);
	bool terminListeLaden();
};

#endif // _TERMINV_H
</code></pre>
<p>CLASS:</p>
<pre><code class="language-cpp">#include &quot;terminv.h&quot;

list&lt;CTermin&gt;::iterator CTerminV::getTerminIterator(const unsigned long _id) {
	list&lt;CTermin&gt;::iterator it = termine.begin();
	while (it != termine.end()) {
		if (it-&gt;getId() == _id) {
			return it;
		}
		it++;
	}
	return termine.end();
}

CTermin *CTerminV::getTermin(const unsigned long _id) {
	list&lt;CTermin&gt;::iterator it = getTerminIterator(_id);
	if (it != termine.end()) {
		return new CTermin(*it);
	} else {
		return NULL;
	}
}

void CTerminV::terminEinfuegen(CTermin &amp;t) {
	t.setNeueId();
	termine.push_back(t);
	termine.sort();
}

bool CTerminV::terminLoeschen(unsigned long _id) {
	list&lt;CTermin&gt;::iterator it = getTerminIterator(_id);
	if (it != termine.end()) {
		termine.erase(it);
		return true;
	} else {
		return false;
	}
}

bool CTerminV::terminBearbeiten(CTermin &amp;t) {
	bool loeschenErfolgreich = terminLoeschen(t.getId());
		if (loeschenErfolgreich) {
			termine.push_back(t);
			termine.sort();
		} else {
			return false;
		}
}

string terminAnzeigen(const unsigned long _id) {
	CTermin* t = getTermin(_id);
	if (t != NULL) {
		return t.toString();
	} else {
		return &quot;Termin mit der ID: &quot; &lt;&lt; _id &lt;&lt; &quot; nicht gefunden!&quot;;
	}
}

void getTermine(list&lt;CTermin&gt; &amp;_terminList, CDatumUhrzeit _von, CDatumUhrzeit _bis) {
	_terminList.clear();
	list&lt;CTermin&gt;::iterator it = _terminList.begin();
	while (it != termine.end()) {
		if (_von &lt;= it-&gt;getBeginn() &amp;&amp; _bis &gt;= it-&gt;getEnde()) {
			_terminList.push_back(*it);
		}
		it++;
	}
}

string getDateiName() {
	return dateiName;
}

void setDateiName(string s) {
	dateiName = s;
}

bool terminListeSpeichern(string _dateiName) {
	ofstream *outputDatei;
	outputDatei = new ofstream(_dateiName.c_str());
	if (! outputDatei-&gt;is_open()) {
		cout &lt;&lt; &quot;Fehler beim oeffnen der Datei!&quot; &lt;&lt; endl;
		return false;
	}
	*outputDatei &lt;&lt; CTermin::next_id &lt;&lt; &quot;|&quot;
				 &lt;&lt; termine.size() &lt;&lt; &quot;|&quot;;

	list&lt;CTermin&gt;::iterator it = termine.begin();
	while (it != termine.end()) {
		*outputDatei &lt;&lt; *it;
		*outputDatei &lt;&lt; '\n';
		*outputDatei &lt;&lt; '|';
		it++;
	}

	outputDatei-&gt;close();
	return true;
}

bool terminListeLaden() {
	ifstream *inputDatei;
	inputDatei = new ifstream(dateiName.c_str());
	char c;		
	unsigned int terminCounter;
	unsigned int i;
	CTermin *t;

	if (! inputDatei-&gt;is_open()) {
		cout &lt;&lt; &quot;Fehler beim oeffnen der Datei!&quot; &lt;&lt; endl;
		return false;
	}

	*inputDatei &gt;&gt; CTermin::next_id;
	*inputDatei &gt;&gt; c;
	*inputDatei &gt;&gt; terminCounter;
	*inputDatei &gt;&gt; c;
	for (i = 0; i &lt; terminCounter; i++) {
		t = new CTermin();
		*inputDatei &gt;&gt; *t;
		*inputDatei &gt;&gt; c;
		while (c != '|') { // '\n' usw. bis einschl. '|' lesen
			*inputDatei &gt;&gt; c; 
		}
		this-&gt;Termine.push_back(*t);
	}
	this-&gt;Termine.sort();
}
</code></pre>
<p>Er meckert bei Zeile 14 der class file,</p>
<p>CTermin *CTerminV::getTermin(const unsigned long _id) {</p>
<p>mit dieser Fehlermeldung:</p>
<p>error C3861: 'getTermin': identifier not found</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1343253</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1343253</guid><dc:creator><![CDATA[klimmbimm]]></dc:creator><pubDate>Sun, 12 Aug 2007 17:11:27 GMT</pubDate></item><item><title><![CDATA[Reply to Ich schlachte meinen C-Compiler!! (kompilierfehler) on Sun, 12 Aug 2007 17:41:12 GMT]]></title><description><![CDATA[<p>Hmm sry, entweder ich bin gerade auch mit Blindheit geschlagen oder zu doof den Fehler zu sehen.</p>
<p>Auf jeden Fall, scheinen bei dir im Code einige viele &quot;std::&quot; (bzw. im Source ein using namespace std;) zu fehlen.<br />
Des weiteren frage ich mich, wieso du bei CTermin ein dynamisches Objekt zurückgibst und auch sonst alle möglichen dynamischen Objekte mit new anforderst, wo du acuh normale Stackobjekte nehmen könntest. Außerdem gibst du den angeforderten Speicher nicht wieder mit delete frei (das ist hier zwingend notwendig, C++ hat keinen Garbage Collector!).<br />
Wenn ich nachher was Zeit finde, füge ich das ganze mal bei mir ein und compiliere das - halt mit ner fiktiven Klasse termin, vllt. kann ich dir dann sagne, wie du den Fehler behebst.</p>
<p>/Edit://</p>
<p>Was mir sonst noch spontan ins Auge fällt:</p>
<pre><code class="language-cpp">string terminAnzeigen(const unsigned long _id) {
    CTermin* t = getTermin(_id);
    if (t != NULL) {
      return t.toString();
    } else {
        return &quot;Termin mit der ID: &quot; &lt;&lt; _id &lt;&lt; &quot; nicht gefunden!&quot;;
    }
}
</code></pre>
<p>Hier stimmt gleich mehreres nicht.<br />
Die Zuweisung passt noch:<br />
Aber dann musst du (a) über den indirekten Zugriffsoperator -&gt; (oder (*t).toString()) auf die Funktion toString() zugreifen und (b) kann man hier das Speicherleck gut sehen.<br />
Du hast in getTermin Speicher auf dem Heap mittels &quot;new&quot; angefordert, gibst ihn aber nicht mehr frei, nach dem Verlassen von terminAnzeigen liegt also auf dem Heap ein Objekt, das nicht mehr benötigt wird und dessen Speicher &quot;tot&quot; ist. Bei einer häufigen Anzahl von Aufrufen der Funktion wird dein Heap also schnell mit toten Objekten zugemüllt.<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /> Und (c) du hast den Klassennamen vergessen anzufügen &quot;CTerminV::&quot; daher wohl auch er Compilerfehler</p>
<p>So wäre es richtig:</p>
<pre><code class="language-cpp">std::string CTerminV::terminAnzeigen(const unsigned long _id) {
    CTermin* t = getTermin(_id);
    if (t != NULL) {
      std::string s = t-&gt;toString();
      delete t;
      return s;
    } else {
        return &quot;Termin mit der ID: &quot; &lt;&lt; _id &lt;&lt; &quot; nicht gefunden!&quot;;
    }
}
</code></pre>
<p>Am schönste wäre es natürlich, wenn getTermin von Anfang an ein Stackobjekt zurückliefern würde:</p>
<pre><code class="language-cpp">CTermin CTerminV::getTermin(const unsigned long _id) {
    list&lt;CTermin&gt;::iterator it = getTerminIterator(_id);
    if (it != termine.end()) {
        return *it;
    } else {
        throw std::exception(&quot;invalid id&quot;);
    }
} 

std::string CTerminV::terminAnzeigen(const unsigned long _id) { 
    try {
      CTermin t = getTermin(_id); 
      return t.toString();
    } catch(...) {
        return &quot;Termin mit der ID: &quot; &lt;&lt; _id &lt;&lt; &quot; nicht gefunden!&quot;;
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1343262</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1343262</guid><dc:creator><![CDATA[Checker*amp*Murckser]]></dc:creator><pubDate>Sun, 12 Aug 2007 17:41:12 GMT</pubDate></item><item><title><![CDATA[Reply to Ich schlachte meinen C-Compiler!! (kompilierfehler) on Sun, 12 Aug 2007 18:02:24 GMT]]></title><description><![CDATA[<p>Das Problem ist mein Dozent, er hat uns folgendes Vorgegeben und ich kenne ihn nicht und weiß nicht wie er darauf reagiert wenn ich das dann sauberer aber nicht nach seinen wunsch implementiere.<br />
Wahrscheinlich wollte er dass wir das Problem mit der Speicherverwaltung von C++ kennenlernen.</p>
<blockquote>
<p>e) Termin aus der Liste kopieren: Deklarieren und implementieren Sie eine weitere Methode, die mit Hilfe der Funktion in d) einen Termin als Kopie aus der Liste holt:<br />
// einzelnen Termin anhand der Id aus der Terminliste holen<br />
// (liefert Kopie, die wieder freigegeben werden muss)<br />
CTermin *getTermin(unsigned long id);</p>
</blockquote>
<p>Ohja ich habe bei den ganzen neuen Methode das CTerminV:: vergessen!</p>
<p>Jetzt meckert er auch nicht mehr an dieser Stelle, sondern hier:</p>
<pre><code class="language-cpp">return &quot;Termin mit der ID: &quot; &lt;&lt; _id &lt;&lt; &quot; nicht gefunden!&quot;;
</code></pre>
<p>error C2296: '&lt;&lt;' : illegal, left operand has type 'const char [20]'</p>
<p>Nochmal alle meine anfängerfehler zusammengefasst:<br />
1. Bei nem Pointer mit . die methoden aufrufen und sonst mit -&gt;<br />
2. Klasse:: vor jeden Methodennamen<br />
3. using namespace std nicht ins header sondern in die class file</p>
<p>Bitte korrigier mich wenn ich da was falsch verstanden habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1343276</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1343276</guid><dc:creator><![CDATA[klimmbimmNoLogin]]></dc:creator><pubDate>Sun, 12 Aug 2007 18:02:24 GMT</pubDate></item><item><title><![CDATA[Reply to Ich schlachte meinen C-Compiler!! (kompilierfehler) on Sun, 12 Aug 2007 18:07:49 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">std::string CTerminV::terminAnzeigen(const unsigned long _id) 
{
    CTermin* t = getTermin(_id);
    if (t != NULL) {
      std::string s = t-&gt;toString();
      delete t;
      return s;
    } else {
        std::stringstream s;
        s &lt;&lt; &quot;Termin mit der ID: &quot; &lt;&lt; _id &lt;&lt; &quot; nicht gefunden!&quot;;
        return s.str();
    }
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1343281</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1343281</guid><dc:creator><![CDATA[The-Kenny]]></dc:creator><pubDate>Sun, 12 Aug 2007 18:07:49 GMT</pubDate></item><item><title><![CDATA[Reply to Ich schlachte meinen C-Compiler!! (kompilierfehler) on Sun, 12 Aug 2007 18:23:31 GMT]]></title><description><![CDATA[<p>klimmbimmNoLogin schrieb:</p>
<blockquote>
<p>Nochmal alle meine anfängerfehler zusammengefasst:<br />
1. Bei nem Pointer mit . die methoden aufrufen und sonst mit -&gt;<br />
2. Klasse:: vor jeden Methodennamen<br />
3. using namespace std nicht ins header sondern in die class file</p>
<p>Bitte korrigier mich wenn ich da was falsch verstanden habe.</p>
</blockquote>
<p>nein 1.:<br />
Methodenaufrufe von Stackobjekten generell mit Objekt.Methode<br />
bei Pointern bzw. dynamischen Objekten (also alles was mit new angefordert wurde) mit objekt-&gt;Methode bzw. (*objekt).Methode()<br />
2.:<br />
wenn die Methode in einer KLasse ist, muss man das bei der Definition im Implementierungsfile (also deinem CLASS file) machen.<br />
3.: ja - also wenn dann in die Quelldatei, niemals in nen Header - da immer schön<br />
std:: vorschreiben.</p>
<p>/Edit:<br />
Zu The-Kennys Code: #include &lt;sstream&gt; nicht vergessen - da ist std::stringstream drin untergebracht</p>
<p>/Edit2:<br />
als Umsteighilfe von Java nach C++</p>
<p>N Stackobjekt legst du so an:</p>
<pre><code class="language-cpp">{ // irgendein Block, Funktion, if-Prozedur, for-Schleife, ...
  TObjekttyp Bezeichner;
} // Stackobjekt wird beim Verlassen des Blocks automatisch zerstört
</code></pre>
<p>ein dynamisches so:</p>
<pre><code class="language-cpp">{ // irgendein Block, Funktion, if-Prozedur, for-Schleife, ...
  TObjekttyp * Bezeichner = new TObjekttyp ; // Pointer namens Bezeichnerbekommt ein neues Objekt vom Typ TObjekttyp zugewiesen
} 
/* ab hier kannst du nicht mehr mittels bezeichner darauf zugreifen, Objekt bleibt sofern nicht im Block schon per &quot;delete Bezeichner&quot; entfernt bestehen 
 :arrow_right: entweder Speicherleck, oder es gibt bereits einen anderen Pointer, der auf das Objekt zugreift und es auch zerstören kann 
- wie oben in dem verbesserten Codesnippet mit getTermin und terminAnzeigen gezeigt - hier übernimmt die Methode, die das Objekt zurückgeliefert kriegt die Zerstörung per delete*/
</code></pre>
<p>Anm.<br />
Du solltest die Speicherverwaltung in deinem Code komplett bereinigen, d.h. allen angeforderten Speicher wieder freigeben, sonst wird dein Lehrer das sicher negativ bewerten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1343283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1343283</guid><dc:creator><![CDATA[Checker*amp*Murckser]]></dc:creator><pubDate>Sun, 12 Aug 2007 18:23:31 GMT</pubDate></item><item><title><![CDATA[Reply to Ich schlachte meinen C-Compiler!! (kompilierfehler) on Mon, 13 Aug 2007 20:38:21 GMT]]></title><description><![CDATA[<p>Ich denke ich habe jetzt alle Speicherlecks behoben, d.h. überall wo ich ein new gefunden habe nach der Verwendung das Objekt gelöscht.</p>
<p>Im header habe ich brav vor jeden string ein std:: gemacht.</p>
<p>Den stringstream habe ich auch eingebaut, danke kenny!</p>
<p>Die komplette Terminverwaltung kommt jetzt ohne Kompilierfehler durch, aber stürzt hier und da ab <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>TerminVerwaltung:</p>
<pre><code class="language-cpp">#include &quot;terminv.h&quot;
#include &lt;sstream&gt;
using namespace std;

list&lt;CTermin&gt;::iterator CTerminV::getTerminIterator(const unsigned long _id) {
	list&lt;CTermin&gt;::iterator it = termine.begin();
	while (it != termine.end()) {
		if (it-&gt;getId() == _id) {
			return it;
		}
		it++;
	}
	return termine.end();
}

CTermin *CTerminV::getTermin(const unsigned long _id) {
	list&lt;CTermin&gt;::iterator it = getTerminIterator(_id);
	if (it != termine.end()) {
		return new CTermin(*it);
	} else {
		return NULL;
	}
}

void CTerminV::terminEinfuegen(CTermin &amp;t) {
	t.setNeueId();
	termine.push_back(t);
	termine.sort();
}

bool CTerminV::terminLoeschen(unsigned long _id) {
	list&lt;CTermin&gt;::iterator it = getTerminIterator(_id);
	if (it != termine.end()) {
		termine.erase(it);
		return true;
	} else {
		return false;
	}
}

bool CTerminV::terminBearbeiten(CTermin &amp;t) {
	bool loeschenErfolgreich = terminLoeschen(t.getId());
		if (loeschenErfolgreich) {
			termine.push_back(t);
			termine.sort();
		} else {
			return false;
		}
}

string CTerminV::terminAnzeigen(const unsigned long _id) {
	CTermin* t = getTermin(_id);
	if (t != NULL) {
		string s = t-&gt;toString();
		delete t;
		return s;
	} else {
		std::stringstream s;
		s &lt;&lt; &quot;Termin mit der ID: &quot; &lt;&lt; _id &lt;&lt; &quot; nicht gefunden!&quot;;
		return s.str();
	}
}

void CTerminV::getTermine(list&lt;CTermin&gt; &amp;_terminList, CDatumUhrzeit _von, CDatumUhrzeit _bis) {
	_terminList.clear();
	list&lt;CTermin&gt;::iterator it = _terminList.begin();
	while (it != termine.end()) {
		//konnte hier kein &lt;= verwenden da der operator nicht implementiert ist
		//z.b. beginn 3.7.07 ende 5.7.07, von 2.7.07 bis 6.7.07
		if (_von &lt; it-&gt;getBeginn() &amp;&amp; it-&gt;getEnde() &lt; _bis) {
			_terminList.push_back(*it);
		}
		it++;
	}
}

string CTerminV::getDateiName() {
	return dateiName;
}

void CTerminV::setDateiName(string s) {
	dateiName = s;
}

bool CTerminV::terminListeSpeichern(string _dateiName) {
	ofstream *outputDatei;
	outputDatei = new ofstream(_dateiName.c_str());
	if (! outputDatei-&gt;is_open()) {
		cout &lt;&lt; &quot;Fehler beim oeffnen der Datei!&quot; &lt;&lt; endl;
		return false;
	}
	*outputDatei &lt;&lt; CTermin::next_id &lt;&lt; &quot;|&quot;
				 &lt;&lt; termine.size() &lt;&lt; &quot;|&quot;;

	list&lt;CTermin&gt;::iterator it = termine.begin();
	while (it != termine.end()) {
		*outputDatei &lt;&lt; *it;
		//zeilenvorschub zur besseren lesbarkeit der datei
		*outputDatei &lt;&lt; '\n';
		*outputDatei &lt;&lt; '|';
		it++;
	}

	outputDatei-&gt;close();
	delete outputDatei;
	return true;
}

bool CTerminV::terminListeLaden() {
	ifstream *inputDatei;
	inputDatei = new ifstream(dateiName.c_str());
	char c;		
	unsigned int terminCounter;
	unsigned int i;
	CTermin *t;

	if (! inputDatei-&gt;is_open()) {
		cout &lt;&lt; &quot;Fehler beim oeffnen der Datei!&quot; &lt;&lt; endl;
		return false;
	}

	//next_id fülle damit nicht alle termine einfach überschrieben werden
	*inputDatei &gt;&gt; CTermin::next_id;
	*inputDatei &gt;&gt; c;
	*inputDatei &gt;&gt; terminCounter;
	*inputDatei &gt;&gt; c;
	for (i = 0; i &lt; terminCounter; i++) {
		t = new CTermin();
		*inputDatei &gt;&gt; *t;
		*inputDatei &gt;&gt; c;
		while (c != '|') { // '\n' usw. bis einschl. '|' lesen
			*inputDatei &gt;&gt; c; 
		}
		termine.push_back(*t);
		delete t;
	}
	termine.sort();
	delete inputDatei;
}
</code></pre>
<p>Zum Beispiel in Zeile 67 stürzt er ab, was ich mir absolut nicht erklären kann denn da macht er doch nur nen vergleich.<br />
Aber jetzt muss ich erstmal pennen, jute nacht!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1343981</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1343981</guid><dc:creator><![CDATA[klimmbimmZuFaulZumLogin]]></dc:creator><pubDate>Mon, 13 Aug 2007 20:38:21 GMT</pubDate></item><item><title><![CDATA[Reply to Ich schlachte meinen C-Compiler!! (kompilierfehler) on Mon, 13 Aug 2007 20:47:42 GMT]]></title><description><![CDATA[<p>dein beispielfehler zeile 67:</p>
<pre><code class="language-cpp">void CTerminV::getTermine(list&lt;CTermin&gt; &amp;_terminList, CDatumUhrzeit _von, CDatumUhrzeit _bis) {
    _terminList.clear();
    list&lt;CTermin&gt;::iterator it = _terminList.begin();
    while (it != termine.end()) {
</code></pre>
<p>schau mal, mit welcher liste du &quot;it&quot; initialisierst, und mit welcher liste du prüfst, ob &quot;it&quot; das Ende der Liste erreicht hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1343983</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1343983</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Mon, 13 Aug 2007 20:47:42 GMT</pubDate></item><item><title><![CDATA[Reply to Ich schlachte meinen C-Compiler!! (kompilierfehler) on Tue, 14 Aug 2007 14:20:40 GMT]]></title><description><![CDATA[<p>oO hab mich jetzt mal an die Funktionsrümpfe von dir zum großteil gehalten und es ein wenig angepasst:</p>
<pre><code class="language-cpp">#include &quot;terminv.h&quot;
#include &lt;sstream&gt;

list&lt;CTermin&gt;::iterator CTerminV::getTerminIterator(unsigned long id) 
{
	for (std::list&lt;CTermin&gt;::iterator it = m_termine.begin(); it != m_termine.end(); ++it) 
		if ((*it).getId() == id) return it;

	return m_termine.end();
}

CTermin* CTerminV::getTermin(unsigned long id) const /* Da Kopie erstellt wird!*/
{
	std::list&lt;CTermin&gt;::iterator it = getTerminIterator(id);
	return (it != m_termine.end() ? new CTermin(*it) : NULL);
}

void CTerminV::terminEinfuegen(const CTermin&amp; termin) // hier muss mal zur abwechslung const hin ;)
{
	m_termine.push_back(termin);
	m_termine[m_termine.size() - 1].setNeueId();
	m_termine.sort();
}

bool CTerminV::terminLoeschen(unsigned long id) 
{
    list&lt;CTermin&gt;::iterator it = getTerminIterator(id);
    if (it != termine.end()) 
	{
        termine.erase(it);
        return true;
    }
	return false;
}

bool CTerminV::terminBearbeiten(const CTermin&amp; termin) 
{
	if (terminLoeschen(termin.getId()) != true) 
		return false;

	m_termine.push_back(termin);
	m_termine.sort();

	return true;
}

const std::string&amp; CTerminV::terminAnzeigen(unsigned long id) const
{
	list&lt;CTermin&gt;::iterator it = getTerminIterator(id);

	if (it != m_termine.end())
		return (*it).toString();

	std::ostringstream ss(&quot;Termin mit der ID: &quot;);
	ss &lt;&lt; id &lt;&lt; &quot; nicht gefunden!&quot;;
	return ss.str();
}

void CTerminV::getTermine(std::list&lt;CTermin&gt;&amp; terminList, CDatumUhrzeit von, CDatumUhrzeit bis) 
{
	terminList.clear();
	for (std::list&lt;CTermin&gt;::iterator it = m_termine.begin(); it != m_termine.end(); ++it)
		if ((*it).getAnfang() &gt;= von &amp;&amp; (*it).getEnde() &lt;= bis)
			terminList.push_back(*it);
}

const std::string&amp; CTerminV::getDateiName() const {	return m_dateiName;	}
void CTerminV::setDateiName(const std::string&amp; name) {	m_dateiName = name;	}

bool CTerminV::terminListeSpeichern(const std::string&amp; dateiName) 
{
	std::ofstream ausgabe(dateiName.c_str(), std::ios::out);
	if (!ausgabe)
	{
		std::cout &lt;&lt; &quot;FEHLER: Die Datei \&quot;&quot; &lt;&lt; dateiName &lt;&lt; &quot;\&quot; konnte nicht geoeffnet werden!&quot; &lt;&lt; std::endl;
		return false;
	}

	ausgabe &lt;&lt; CTermin::next_id &lt;&lt; &quot;|&quot; &lt;&lt; m_termine.size() &lt;&lt; &quot;|&quot;;

	for (std::list&lt;CTermin&gt;::iterator it = m_termine.begin(); it != m_termine.end(); ++it) 
		ausgabe &lt;&lt; *it &lt;&lt; &quot;\n|&quot;;

    return true;
}

bool CTerminV::terminListeLaden() 
{
	m_termine.clear();
	std::ifstream einlesen(m_dateiName.c_str(), std::ios::in);
	if (!einlesen)
	{
		std::cout &lt;&lt; &quot;FEHLER: Die Datei \&quot;&quot; &lt;&lt; m_dateiName &lt;&lt; &quot;\&quot; konnte nicht geoffnet werden!&quot; &lt;&lt; std::endl;
		return false;
	}

	einlesen &gt;&gt; CTermin::next_id;
	einlesen.seekg(sizeof(char), std::ios::cur);
	std::size_t anzahlTermine;
	einlesen &gt;&gt; anzahlTermine;
	einlesen.seekg(sizeof(char), std::ios::cur);
	for (std::size_t i = 0; i &lt; anzahlTermine; ++i)
	{
		CTermin* tmp = new CTermin;
		einlesen &gt;&gt; *tmp;
		m_termine.push_back(*tmp);
		delete tmp;
		while (einlesen.get() != '|');
    }
    m_termine.sort();
}
</code></pre>
<p>... guck dir die Veränderungen mal an ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1344388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1344388</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Tue, 14 Aug 2007 14:20:40 GMT</pubDate></item><item><title><![CDATA[Reply to Ich schlachte meinen C-Compiler!! (kompilierfehler) on Tue, 14 Aug 2007 17:29:09 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>dein beispielfehler zeile 67:</p>
<pre><code class="language-cpp">void CTerminV::getTermine(list&lt;CTermin&gt; &amp;_terminList, CDatumUhrzeit _von, CDatumUhrzeit _bis) {
    _terminList.clear();
    list&lt;CTermin&gt;::iterator it = _terminList.begin();
    while (it != termine.end()) {
</code></pre>
<p>schau mal, mit welcher liste du &quot;it&quot; initialisierst, und mit welcher liste du prüfst, ob &quot;it&quot; das Ende der Liste erreicht hat.</p>
</blockquote>
<p>tja was soll ich dazu noch sagen, das ist ja einfach nur peinlich :D, danke!</p>
<p>@Evil<br />
Ich habe ein paar Passagen übernommen, aber an die terminListeLaden und terminListeSpeichern Methoden habe ich mich nicht drangetraut.<br />
Ich könnte meinem Dozenten ja gar nicht erklären was diese seek methode macht und wieso ich die plötzlich verwende, wo er es uns doch ganz anders beigebracht hat.</p>
<p>Das mit dem stringstream kann ich noch vertreten, ist ja wie ein stringbuffer in java glaube ich.</p>
<p>Aber warum hast du die terminEinfuegen Methode geändert ?<br />
Es war doch vorher viel einfacher zu verstehen was da passiert.<br />
Wieso soll ich da const einfügen wenn ich doch an dem Objekt was ändere ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1344500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1344500</guid><dc:creator><![CDATA[klimmpimm]]></dc:creator><pubDate>Tue, 14 Aug 2007 17:29:09 GMT</pubDate></item><item><title><![CDATA[Reply to Ich schlachte meinen C-Compiler!! (kompilierfehler) on Tue, 14 Aug 2007 20:08:49 GMT]]></title><description><![CDATA[<blockquote>
<p>Ich habe ein paar Passagen übernommen, aber an die terminListeLaden und terminListeSpeichern Methoden habe ich mich nicht drangetraut.</p>
</blockquote>
<p>Dann schieß los, wo du etwas noch nicht verstanden hast!</p>
<pre><code class="language-cpp">einlesen &gt;&gt; CTermin::next_id;
einlesen.seekg(sizeof(char), std::ios::cur);
std::size_t anzahlTermine;
einlesen &gt;&gt; anzahlTermine;
einlesen.seekg(sizeof(char), std::ios::cur);
</code></pre>
<p>Das ist eigentlich ganz einfach <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="🙂"
    /> zum einen hab ich die Variablen einlesen genannt, weil du auch sonnst rel. viel deutsche Variablennamen am wählen scheinst <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="😉"
    /><br />
Zu seekg ... seek steht ja für &quot;suchen&quot; und erklärt die Funktion nicht soo toll <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="😉"
    /> Der 1. Parameter heißt halt, um wie viele Byte du &quot;seeken&quot;, d.h. dich in der Datei bewegen willst. sizeof(char) d.h., weil du ja sonnst für '|' eine Variable angelegt hattest und da immer reingelesen hattest ... deren Type war char. std::ios::cur gibt nur an von wo aus er sich fortbewegen soll. Wenn du bsw. std::ios::beg angegeben hättest, dann würde er wieder an den Anfang springen und von da aus sizeof(char) Bytes nach vorne gehen. Wenn ein negativer Wert da steht geht es rückwärts ... bei std::ios::beg natürlich nicht sooo sinnig <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="😉"
    /><br />
Zum nachlesen: <a href="http://www.cplusplus.com/reference/iostream/istream/seekg.html" rel="nofollow">http://www.cplusplus.com/reference/iostream/istream/seekg.html</a></p>
<blockquote>
<p>Aber warum hast du die terminEinfuegen Methode geändert ?<br />
Es war doch vorher viel einfacher zu verstehen was da passiert.<br />
Wieso soll ich da const einfügen wenn ich doch an dem Objekt was ändere ?</p>
</blockquote>
<p>Hmm ja ich hab die Funktion etwas im Sinn geändert fällt mir gerade auf. Aber mal zum Erklären:</p>
<pre><code class="language-cpp">void CTerminV::terminEinfuegen(const CTermin&amp; termin)
{
    m_termine.push_back(termin); // eine KOPIE von termin wird in m_termine abgelegt
    m_termine[m_termine.size() - 1].setNeueId(); // m_termine.size() - 1, da der Index eines Arrays bei 0 und nicht bei 1 anfängt ;) m_termine.size() - 1 ist d.h. das letzte und neu hinzugefügte item ... da es aber eine Kopie des Orginals ist, ist const weg und wir können wieder setNeueId aufrufen!
    m_termine.sort();
}
</code></pre>
<p>... So ... sinnlich ist die Veränderung, dass nun das Objekt termin nach und vor terminEinfügen die selbe ID von außen hat also</p>
<pre><code class="language-cpp">CTermin termin;
std::cout &lt;&lt; termin.getId() &lt;&lt; std::endl;
verwaltung.terminEinfuegen(termin);
std::cout &lt;&lt; termin.getId() &lt;&lt; std::endl;
</code></pre>
<p>Wie du siehst ist die ID identisch ... in der Verwaltungsklasse hat dieser Termin jetzt aber eine andere id ...</p>
<p>Solltest evt. noch nen const_iterator einbauen ... oftmals erstellst du Kopien deiner Objekte und d.h. brauchst nur const-Versionen ... kann der Compiler evt. was optimieren <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>Wenn du noch Fragen hast ... immer her damit <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/1344613</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1344613</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Tue, 14 Aug 2007 20:08:49 GMT</pubDate></item><item><title><![CDATA[Reply to Ich schlachte meinen C-Compiler!! (kompilierfehler) on Tue, 14 Aug 2007 20:54:45 GMT]]></title><description><![CDATA[<p>Hmm ok das mit dem Array leuchtet mir ein, also die fangen echt bei 0 an ? <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="😉"
    /><br />
Also ne das mit der terminEinfuegen methode von dir bringt mir nix außer verwirrung meines profs und ich will ihn ja nicht überlasten.<br />
Denn die Termine werden ja direkt nach dem einfügen sowieso gelöscht, da isses egal ob der eine jetzt ne andere id hat als der in der verwaltung.</p>
<p>Aber den rest habe ich jetzt verstanden und sobald mein Programm ohne crash läuft, werde ich auch mal deine Lösung von termineLesen und Speichern verwenden.<br />
Achne eine sache habe ich noch nicht verstanden</p>
<pre><code class="language-cpp">std::ifstream einlesen(m_dateiName.c_str(), std::ios::in);
    if (!einlesen)
</code></pre>
<p>wieso öffnest du da den stream nicht mit open so wie in der referenz beschrieben ?</p>
<p>Uuund das mit dem const_iterator, ehhhm ich bin java programmierer mir ist die performance sch* egal, das ding muss nur laufen <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>PS: Ich tue viele deutsche Variablennamen wählen weil unser Dozent uns 50% von dem Code vorgibt <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>So damit du mal den kompletten Umfang des Programms siehst hier das Hauptprogramm (auch main genannt <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="😉"
    /> ) von unserem Dozenten.<br />
Aja und damit das ganze läuft gib ich dich noch die CDatumuhrzeit und CTermin Klasse dazu, dann siehste mal was man an ner deutschen FH heutzutage so lernen tut.</p>
<p>MAIN:</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &quot;..\libTerminV\termin.h&quot;
#include &quot;..\libTerminV\terminv.h&quot;

using namespace std;

int main(int argc, char* argv[])
{
    char cmd;
    string cmdline;
    string str;
    string dateiName;
    CTerminV tv;    // Terminverwaltung instantiieren
    CTermin *t;
    list&lt;CTermin&gt; terminAnsicht;
    list&lt;CTermin&gt;::const_iterator itl;
    CDatumUhrzeit *von;
    CDatumUhrzeit *bis;
    unsigned long id;
    char c;
	string DEFAULT_TERMINE_DATEI = &quot;terminListe.txt&quot;;

    // Terminliste von Platte laden
    cout &lt;&lt; &quot;Termine-Datei laden, Dateiname [&quot;
         &lt;&lt; DEFAULT_TERMINE_DATEI &lt;&lt; &quot;]: &quot;;
    getline(cin, dateiName);
    if (dateiName.length() &lt;= 1) dateiName = DEFAULT_TERMINE_DATEI;
    tv.setDateiName(dateiName);
    tv.terminListeLaden();

    // Funktionsschleife mit Menü
    do {

       // Menü anzeigen falls Kommandozeile leer
       if (cmdline.length() &lt;= 1) {
          cout &lt;&lt; &quot;Terminkalender: Funktionen&quot; &lt;&lt; endl;
          cout &lt;&lt; &quot;  e : Exit&quot; &lt;&lt; endl;
          cout &lt;&lt; &quot;  a : Terminliste anzeigen&quot; &lt;&lt; endl;
          cout &lt;&lt; &quot;  t : Termin anzeigen&quot; &lt;&lt; endl;
          cout &lt;&lt; &quot;  n : Termin neu anlegen&quot; &lt;&lt; endl;
          cout &lt;&lt; &quot;  b : Termin bearbeiten&quot; &lt;&lt; endl;
          cout &lt;&lt; &quot;  l : Termin loeschen&quot; &lt;&lt; endl;
          cout &lt;&lt; &quot;  s : Terminliste speichern&quot; &lt;&lt; endl;
       }
       cout &lt;&lt; &quot;&gt;&quot;;

       // Kommando einlesen
       cin.clear();
       cmd = ' ';
       cmdline = &quot;&quot;;
       getline(cin, cmdline);
       cmd = cmdline[0];

       // Kommando auswerten
       switch (cmd) {
          case 'e':
             break;
          case 'a':
             // Terminliste anzeigen
             von = new CDatumUhrzeit();
             *von -= WEEK;
             cout &lt;&lt; &quot;Termine anzeigen, bitte Zeitraum eingeben!&quot;
                  &lt;&lt; endl;
             cout &lt;&lt; &quot;Termine von [&quot; &lt;&lt; von-&gt;toString() &lt;&lt; &quot;]: &quot;;
             cin &gt;&gt; *von;
             bis = new CDatumUhrzeit(*von + 31*DAY);
             cout &lt;&lt; &quot;Termine bis [&quot; &lt;&lt; bis-&gt;toString() &lt;&lt; &quot;]: &quot;;
             cin &gt;&gt; *bis;
             tv.getTermine(terminAnsicht, *von, *bis);
             cout &lt;&lt; &quot;Termine von &quot; &lt;&lt; von-&gt;toString()
                  &lt;&lt; &quot; bis &quot; &lt;&lt; bis-&gt;toString() &lt;&lt; &quot;:&quot; &lt;&lt; endl;
             if (terminAnsicht.empty()) {
                  cout &lt;&lt; &quot;Terminliste ist leer.&quot; &lt;&lt; endl;
             }
             else {
                  cout &lt;&lt; (unsigned long) terminAnsicht.size() 
                       &lt;&lt; &quot; Eintraege:&quot; &lt;&lt; endl;
                  for (itl = terminAnsicht.begin();
                       itl != terminAnsicht.end(); itl++) {
                     cout &lt;&lt; &quot;  &quot; &lt;&lt; itl-&gt;toString() &lt;&lt; endl;
                  }
             }
             delete von;
             delete bis;
             break;
          case 't':
             // Termin anzeigen
             cout &lt;&lt; &quot;Bitte Termin Id eingeben: &quot;;
             cin &gt;&gt; id;
             getline(cin, str);
             str = tv.terminAnzeigen(id);
             cout &lt;&lt; str;
             break;
          case 'n':
             // Termin neu anlegen
             t = new CTermin();
             cin &gt;&gt; *t;
             tv.terminEinfuegen(*t);
             cout &lt;&lt; &quot;Neuer Termin: &quot; &lt;&lt; t-&gt;toStringAll() &lt;&lt; endl;
             delete t;
             break;
          case 'b':
             // Termin bearbeiten
             cout &lt;&lt; &quot;Bitte Termin Id eingeben: &quot;;
             cin &gt;&gt; id;
             getline(cin, str);
             t = tv.getTermin(id);
             if (t == 0) {
                 cout &lt;&lt; &quot;Termin mit id '&quot; &lt;&lt; int2string(id, &quot;%i&quot;)
                      &lt;&lt; &quot;' nicht gefunden!&quot; &lt;&lt; endl;
                 break;
             }
             cin &gt;&gt; *t;
             if ( ! tv.terminBearbeiten(*t)) {
                 cout &lt;&lt; &quot;Termin mit id '&quot; &lt;&lt; int2string(id, &quot;%i&quot;)
                 &lt;&lt; &quot;' wurde inzwischen geloescht! Neu anlegen? [J/N]:&quot;;
                 getline(cin, str);
                 c = toupper(str.c_str()[0]);
                 if (c == 'J' || c == 'Y') {
                    tv.terminEinfuegen(*t);
                 }
                 else break;
             };
             cout &lt;&lt; &quot;Geaenderter Termin: &quot; &lt;&lt; t-&gt;toStringAll() &lt;&lt; endl;
             delete t;
             break;
          case 'l':
             // Termin löschen
             cout &lt;&lt; &quot;Bitte Termin Id eingeben: &quot;;
             cin &gt;&gt; id;
             getline(cin, str);
             t = tv.getTermin(id);
             if ( t == 0) {
                 cout &lt;&lt; &quot;Termin mit id '&quot; &lt;&lt; int2string(id, &quot;%i&quot;)
                      &lt;&lt; &quot;' nicht gefunden!&quot; &lt;&lt; endl;
                 break;
             }
             cout &lt;&lt; t-&gt;toStringAll() &lt;&lt; endl;
             cout &lt;&lt; &quot;Termin wirklich loeschen? [J/N]:&quot;;
             getline(cin, str);
             c = toupper(str.c_str()[0]);
             if (c == 'J' || c == 'Y') {
                if (tv.terminLoeschen(id)) {
                    cout &lt;&lt; &quot;Termin geloescht!&quot; &lt;&lt; endl;
                }
                else {
                    cout &lt;&lt; &quot;Fehler: Termin nicht geloescht!&quot; &lt;&lt; endl;
                };
             }
             delete t;
             break;
          case 's':
             // Terminliste speichern
             cout &lt;&lt; &quot;Bitte Dateinamen angeben [&quot;
                  &lt;&lt; tv.getDateiName() &lt;&lt; &quot;]: &quot;;
             getline(cin, dateiName);
             if (dateiName.length() &lt;= 1) dateiName = tv.getDateiName();
             if (tv.terminListeSpeichern(dateiName)) {
                cout &lt;&lt; &quot;Terminliste gespeichert unter: &quot;
                     &lt;&lt; dateiName &lt;&lt; endl;
                cout &lt;&lt; &quot;Gespeicherte Datei als Arbeitsdatei nehmen? [J/N]:&quot;;
                getline(cin, str);
                c = toupper(str.c_str()[0]);
                if (c == 'J' || c == 'Y') {
                   tv.setDateiName(dateiName);
                }
             }             
             break;
          default:
             cout &lt;&lt; &quot;falsches Kommando (&quot; &lt;&lt; cmd &lt;&lt; &quot;)&quot; &lt;&lt;endl;
             cmdline = &quot;&quot;;
             break;
       }
    } while (cmd != 'e');

    // Terminliste auf Platte speichern
    tv.terminListeSpeichern(tv.getDateiName());

    return 0;
}
</code></pre>
<p>CTERMIN:</p>
<pre><code class="language-cpp">#include &quot;termin.h&quot;;

unsigned long CTermin::next_id = 1;

//*******************************************
// Konstruktoren
//*******************************************

CTermin::CTermin() {
	CDatumUhrzeit du;
	setBeginn(du);
	setEnde(du+=MINUTE*30);
	setOrt(&quot;zuhuss&quot;);
	setTitel(&quot;zuhuss&quot;);
	setText(&quot;zuhuss&quot;);
	this-&gt;id = 0;
};

//*******************************************
// Setter
//*******************************************
void CTermin::setOrt(string _ort) {
	this-&gt;Ort = _ort;
};

void CTermin::setTitel(string _titel) {
	this-&gt;Titel = _titel;
};

void CTermin::setText(string _text) {
	this-&gt;Text = _text;
};

void CTermin::setBeginn(CDatumUhrzeit _beginn) {
	Zeitspanne alte_spanne = this-&gt;Ende - this-&gt;Beginn;
	CDatumUhrzeit neues_ende = _beginn + alte_spanne;
	this-&gt;Beginn = _beginn;
	this-&gt;setEnde(neues_ende);
};

void CTermin::setEnde(CDatumUhrzeit ende) {
	this-&gt;Ende = ende;
};

void CTermin::setNeueId() {
	this-&gt;id = ++this-&gt;next_id;
}
//*******************************************
// Getter
//*******************************************
string CTermin::getOrt() const {
	return this-&gt;Ort;
};

string CTermin::getTitel() const {
	return this-&gt;Titel;
};

string CTermin::getText() const {
	return this-&gt;Text;
};

CDatumUhrzeit CTermin::getBeginn() const {
	return this-&gt;Beginn;
};

CDatumUhrzeit CTermin::getEnde() const {
	return this-&gt;Ende;
};

long CTermin::getId() const {
	return this-&gt;id ;
}
//*******************************************
// tostrings
//*******************************************

string CTermin::toString() const {
	string str;
	str = &quot;\nTitel: &quot; + this-&gt;getTitel() + &quot;\n&quot;;
	str += &quot;Ort: &quot; + this-&gt;getOrt() + &quot;\n&quot;;
	str += &quot;Text: &quot; + this-&gt;getText() + &quot;\n&quot;;
	str += &quot;Beginn: &quot; + this-&gt;getBeginn().toString() + &quot;\n&quot;;
	str += &quot;Ende: &quot; + this-&gt;getEnde().toString() + &quot;\n&quot;;
    return str;
};

string CTermin::toStringAll() const {
	string str;
	str = toString();
	str += &quot;Id: &quot; + this-&gt;getId();
    return str;
};

//*******************************************
// Operatoren
//*******************************************

bool CTermin::operator==(const unsigned long _id) const
{
	return this-&gt;getId() == _id;
};

bool CTermin::operator&lt;(const CTermin &amp;_termin) const
{
	bool isLessThan = false;
	if (this-&gt;getBeginn() &lt; _termin.getBeginn()) {
		isLessThan = true;
	} else if (this-&gt;getEnde() &lt; _termin.getEnde()) {
		isLessThan = true;
	} else if (this-&gt;getTitel() &lt; _termin.getTitel()) {
		isLessThan = true;
	} else if (this-&gt;getId() &lt; _termin.getId()) {
		isLessThan = true;
	}
    return isLessThan;
};

//*******************************************
// friend Operatoren
//*******************************************

ostream&amp; operator&lt;&lt;(ostream &amp;_out, const CTermin &amp;_termin)
{
    _out &lt;&lt; _termin.toString().c_str();
    return _out;
};

istream&amp; operator&gt;&gt;(istream &amp;_in, CTermin &amp;_termin)
{
	string inputString;
	CDatumUhrzeit inputDatumUhrzeit;

	//Titel setzen
	cout &lt;&lt; &quot;Bitte geben sie den Titel des Termins ein:&quot; &lt;&lt; endl;
	_in &gt;&gt; inputString;
	_termin.setTitel(inputString);

	//Ort setzen
	cout &lt;&lt; &quot;Bitte geben sie den Ort des Termins ein:&quot; &lt;&lt; endl;
	_in &gt;&gt; inputString;
	_termin.setOrt(inputString);

	//Text setzen
	cout &lt;&lt; &quot;Bitte geben sie den Text des Termins ein:&quot; &lt;&lt; endl;
	_in &gt;&gt; inputString;
	_termin.setText(inputString);

	//Beginn setzen
	cout &lt;&lt; &quot;Bitte geben sie den Beginn des Termins ein:&quot; &lt;&lt; endl;
	_in &gt;&gt; inputDatumUhrzeit;
	_termin.setBeginn(inputDatumUhrzeit);

	//Ende setzen
	cout &lt;&lt; &quot;Bitte geben sie das Ende des Termins ein:&quot; &lt;&lt; endl;
	_in &gt;&gt; inputDatumUhrzeit;
	_termin.setEnde(inputDatumUhrzeit);

	_termin.setNeueId();
	return _in;
}

//1|1181975400|1181986800|8|Raum D1015|Vorlesung PSE 136|Terminkalender fertig implementieren

ofstream&amp; operator&lt;&lt;(ofstream &amp;fout, const CTermin &amp;t) {
	fout &lt;&lt; t.id &lt;&lt; &quot;|&quot;
		&lt;&lt; t.Beginn &lt;&lt; &quot;|&quot;
		&lt;&lt; t.Ende &lt;&lt; &quot;|&quot;
		&lt;&lt; t.Ort.length() &lt;&lt; &quot;|&quot; &lt;&lt; t.Ort
		&lt;&lt; t.Titel.length() &lt;&lt; &quot;|&quot; &lt;&lt; t.Titel
		&lt;&lt; t.Text.length() &lt;&lt; &quot;|&quot; &lt;&lt; t.Text;
	return fout;
}

ifstream&amp; operator&gt;&gt;(ifstream &amp;fin, CTermin &amp;t) {
	char c;
	int len;
	char ortBuf[1024];
	char titelBuf[1024];
	char textBuf[1024];

	fin &gt;&gt; t.id &gt;&gt; c;
	fin &gt;&gt; t.Beginn &gt;&gt; c;
	fin &gt;&gt; t.Ende &gt;&gt; c;
	//Ort
	fin &gt;&gt; len &gt;&gt; c;
	if (len != 0) {
	    fin.get(ortBuf, len + 1);
		t.Ort = ortBuf;
	}
	//Titel
	fin &gt;&gt; len &gt;&gt; c;
	if (len != 0) {
	    fin.get(titelBuf, len + 1);
		t.Titel = titelBuf;
	}
	//Text
	fin &gt;&gt; len &gt;&gt; c;
	if (len != 0) {
	    fin.get(textBuf, len + 1);
		t.Text = textBuf;
	}
	return fin;
}
</code></pre>
<p>CDatumUhrzeit:</p>
<pre><code class="language-cpp">#include &quot;datumuhrzeit.h&quot;

//*******************************************
// Konstuktoren
//*******************************************

CDatumUhrzeit::CDatumUhrzeit() {
    this-&gt;Zeit = CDatumUhrzeit::now();
};

CDatumUhrzeit::CDatumUhrzeit(const CDatumUhrzeit &amp;du) {
    this-&gt;Zeit = du.Zeit;
};

CDatumUhrzeit::CDatumUhrzeit(struct tm zeit) {
    this-&gt;Zeit = zeit;
};

//*******************************************
// statische Element-Funktionen
//*******************************************

void CDatumUhrzeit::convertZeit2Tm(long jahr, int monat, int tag,
                           int std, int minute, int sec, struct tm&amp; zeit)
{
    zeit.tm_year = jahr - 1900;
    zeit.tm_mon = monat - 1;
    zeit.tm_mday = tag;
    zeit.tm_hour = std;
    zeit.tm_min = minute;
    zeit.tm_sec = sec;
};

void CDatumUhrzeit::convertTm2Zeit(struct tm zeit, long&amp; jahr, int&amp; monat, int&amp; tag,
                                           int&amp; std, int&amp; minute, int&amp; sec)
{
    jahr = zeit.tm_year + 1900;
    monat = zeit.tm_mon + 1;
    tag = zeit.tm_mday;
    std = zeit.tm_hour;
    minute = zeit.tm_min;
    sec = zeit.tm_sec;
};

struct tm CDatumUhrzeit::now(){
    errno_t errnum;
    struct tm tm_time;
    time_t t = time(NULL);			// aktuelle Zeit in Sekunden seit 1970
    errnum = localtime_s(&amp;tm_time, &amp;t);	// time_t nach struct tm konvertieren
    return tm_time;				// Inhalt der Struktur zurückgeben
};

//*******************************************
// Element-Funktionen
//*******************************************

void CDatumUhrzeit::setZeitpunkt(struct tm zeit) {
    this-&gt;Zeit = zeit;
};

struct tm CDatumUhrzeit::getZeitpunkt() const {
    return(this-&gt;Zeit);
};

void CDatumUhrzeit::getZeitpunkt(long&amp; jahr, int&amp; monat, int&amp; tag,
                                int&amp; std, int&amp; minute, int&amp; sec) const
{
    CDatumUhrzeit::convertTm2Zeit(this-&gt;Zeit, jahr, monat, tag, std, minute, sec);
};

string CDatumUhrzeit::toString() const {
    string str;
    long jahr;
    int monat, tag;
    int std, minute, sec;
    CDatumUhrzeit::convertTm2Zeit(this-&gt;Zeit, jahr, monat, tag, std, minute, sec);
    str = int2string(tag, &quot;%02d&quot;);
    str += &quot;.&quot;;
    str += int2string(monat, &quot;%02d&quot;);;
    str += &quot;.&quot;;
    str += int2string(jahr, &quot;%04d&quot;);;
    str += &quot; &quot;;
    str += int2string(std, &quot;%02d&quot;);;
    str += &quot;:&quot;;
    str += int2string(minute, &quot;%02d&quot;);;
    str += &quot;:&quot;;
    str += int2string(sec, &quot;%02d&quot;);;
    return str;
};

//*******************************************
// Operatoren
//*******************************************

CDatumUhrzeit&amp; CDatumUhrzeit::operator=(const CDatumUhrzeit &amp;du)
{
    this-&gt;Zeit = du.Zeit;
    return *this;
};

bool CDatumUhrzeit::operator&lt;(const CDatumUhrzeit &amp;du) const
{
    time_t t1, t2;
    struct tm tmp_zeit, tmp_zeit_intern;
	tmp_zeit_intern = this-&gt;Zeit;
    t1 = mktime(&amp;tmp_zeit_intern);
    tmp_zeit = du.Zeit;
    t2 = mktime(&amp;tmp_zeit);
    return t1 &lt; t2;
};

bool CDatumUhrzeit::operator==(const CDatumUhrzeit &amp;du) const
{
    time_t t1, t2;
    struct tm tmp_zeit, tmp_zeit_intern;
	tmp_zeit_intern = this-&gt;Zeit;
    t1 = mktime(&amp;tmp_zeit_intern);
    tmp_zeit = du.Zeit;
    t2 = mktime(&amp;tmp_zeit);
    return t1 == t2;
};

bool CDatumUhrzeit::operator!=(const CDatumUhrzeit &amp;du) const
{
    return (! (*this == du));
};

CDatumUhrzeit&amp; CDatumUhrzeit::operator+=(Zeitspanne zsp)
{
	errno_t errnum;
    time_t t;
    t = mktime(&amp;this-&gt;Zeit);
    time_t new_t;
    Zeitspanne zsp1;
    if (zsp &lt; 0) zsp1 = -zsp; else zsp1 = zsp;
    new_t = t + (time_t) zsp1;
    errnum = localtime_s(&amp;(this-&gt;Zeit), &amp;new_t);
    return *this;
};

CDatumUhrzeit&amp; CDatumUhrzeit::operator-=(Zeitspanne zsp)
{
	errno_t errnum;
    time_t t;
    t = mktime(&amp;this-&gt;Zeit);
    time_t new_t;
    Zeitspanne zsp1;
    if (zsp &lt; 0) zsp1 = -zsp; else zsp1 = zsp;
    new_t = t - (time_t) zsp1;
    errnum = localtime_s(&amp;(this-&gt;Zeit), &amp;new_t);
    return *this;
};

Zeitspanne CDatumUhrzeit::operator-(const CDatumUhrzeit&amp; du)
{
    Zeitspanne zsp;
    struct tm tmp_zeit;
    time_t t1;
    time_t t2;
    t1 = mktime(&amp;this-&gt;Zeit);
    tmp_zeit = du.Zeit;
    t2 = mktime(&amp;tmp_zeit);
    zsp = difftime (t1, t2);
    if (zsp &lt; 0) zsp = -zsp;
    return zsp;

};

CDatumUhrzeit CDatumUhrzeit::operator-(Zeitspanne zsp)
{
    CDatumUhrzeit du = *this;
    du -= zsp;
    return du;
};

CDatumUhrzeit CDatumUhrzeit::operator+(Zeitspanne zsp)
{
    CDatumUhrzeit du = *this;
    du += zsp;
    return du;
};

//*******************************************
// Friend-Operatoren
//*******************************************

ostream&amp; operator&lt;&lt;(ostream&amp; out, const CDatumUhrzeit&amp; du)
{
    out &lt;&lt; du.toString().c_str();
    return out;
};

istream&amp; operator&gt;&gt;(istream&amp; in, CDatumUhrzeit&amp; du)
{
    string str;
    string tmp;
    long n;
    size_t i;
    struct tm zeit;

    zeit = du.Zeit;
    getline(in, str);

    // Tag
    n = atoi(str.c_str());
    if (n == 0) {
        du.Zeit = zeit;   // aktueller Zeitpunkt
        return in;
    }
    // init Uhrzeit
    zeit.tm_hour = 0;
    zeit.tm_min = 0;
    zeit.tm_sec = 0;
    if (n &lt; 1 || n &gt; 31) {
       du.Zeit = zeit;
       return in;
    }
    zeit.tm_mday = n;

    // Monat
    i = str.find_first_of(&quot;.&quot;);
    if (i == (size_t)-1 ) {
       du.Zeit = zeit;
       return in;
    }
    n = atoi(&amp;str.c_str()[i+1]);
    if (n &lt; 1 || n &gt; 12) {
       du.Zeit = zeit;
       return in;
    }
    zeit.tm_mon = n - 1;

    // Jahr
    tmp = &amp;str.c_str()[i+1];
    i = tmp.find_first_of(&quot;.&quot;);
    if (i == (size_t)-1 ) {
       du.Zeit = zeit;
       return in;
    }
    n = atoi(&amp;tmp.c_str()[i+1]);
    if (n &lt; 0 || n &gt; 2038) {
        du.Zeit = zeit;
        return in;
    }
    if (n &gt;= 50 &amp;&amp; n &lt; 100) {
        n += 1900;
    }
    if (n &lt; 50) {
        n += 2000;
    }
    zeit.tm_year = n - 1900;

    // Stunde
    i = str.find_first_of(&quot; &quot;);
    if (i == (size_t)-1 ) {
       du.Zeit = zeit;
       return in;
    }
    n = atoi(&amp;str.c_str()[i+1]);
    if (n &lt; 0 || n &gt; 23) {
       du.Zeit = zeit;
       return in;
    }
    zeit.tm_hour = n;

    // Minute
    i = str.find_first_of(&quot;:&quot;);
    if (i == (size_t)-1 ) {
       du.Zeit = zeit;
       return in;
    }
    n = atoi(&amp;str.c_str()[i+1]);
    if (n &lt; 0 || n &gt; 59) {
       du.Zeit = zeit;
       return in;
    }
    zeit.tm_min = n;

    // Sekunde
    tmp = &amp;str.c_str()[i+1];
    i = tmp.find_first_of(&quot;:&quot;);
    if (i == (size_t)-1 ) {
       du.Zeit = zeit;
       return in;
    }
    n = atoi(&amp;tmp.c_str()[i+1]);
    if (n &lt; 0 || n &gt; 59) {
       du.Zeit = zeit;
       return in;
    }
    zeit.tm_sec = n;

    du.Zeit = zeit;
    return in;
};

ofstream&amp; operator&lt;&lt;(ofstream&amp; fout, const CDatumUhrzeit&amp; du)
{
    time_t t1;
    struct tm zeit = du.Zeit;
    t1 = mktime(&amp;zeit);
    fout &lt;&lt; (long) t1 &lt;&lt; '|';
    return fout;
};

ifstream&amp; operator&gt;&gt;(ifstream&amp; fin, CDatumUhrzeit&amp; du)
{
	errno_t errnum;
    char c;
    struct tm tm_time;
    time_t t;
    fin &gt;&gt; t &gt;&gt; c;
    errnum = localtime_s(&amp;tm_time, &amp;t);
    du.Zeit = tm_time;
    return fin;
};

//*******************************************
// Funktionen außerhalb der Klasse
//*******************************************

string int2string(int i, char *format) {
    char temp[128];
    string str;
    sprintf_s(temp, format, i);
    str = temp;
    return str;
};
</code></pre>
<p>Ach und falls du das ding auch ans laufen bringen willst hier die header:</p>
<pre><code class="language-cpp">#ifndef _TERMIN_H
#define _TERMIN_H
#include &quot;../../datumuhrzeit.h&quot;
#include &lt;string&gt;
#include &lt;iostream&gt;, &lt;fstream&gt;

using namespace std;

#define DEFAULT_DAUER (MINUTE*30)

class CTermin {
	protected:
		unsigned long id;
		CDatumUhrzeit Beginn;
		CDatumUhrzeit Ende;
		string Ort;
		string Titel;
		string Text;

	public:
		static unsigned long next_id;
		//Konstruktoren
		CTermin();

		//setter
		void setOrt (string _ort);
		void setTitel (string _titel);
		void setText (string _text);
		void setBeginn(CDatumUhrzeit _beginn);
		void setEnde(CDatumUhrzeit _ende);
		void setNeueId();

		//getter	
		string getOrt() const;
		string getTitel() const;
		string getText() const;
		CDatumUhrzeit getBeginn() const;
		CDatumUhrzeit getEnde() const;
		long getId() const;

		//tostrings
		string toString() const;
		string toStringAll() const;

		//operatoren
		bool operator&lt;(const CTermin &amp;_termin) const;
		bool operator==(const unsigned long _id) const;

		//friend operatoren
		friend ostream&amp; operator&lt;&lt;(ostream&amp;, const CTermin&amp;);
		friend istream&amp; operator&gt;&gt;(istream&amp;, CTermin&amp;);
		//friend ofstream&amp; operator&lt;&lt;(ofstream&amp;, const CTermin&amp;);
		//friend ifstream&amp; operator&gt;&gt;(ifstream&amp;, CTermin&amp;);
		friend ofstream&amp; operator&lt;&lt;(ofstream &amp;fout, const CTermin &amp;t);
		friend ifstream&amp; operator&gt;&gt;(ifstream &amp;fin, CTermin &amp;t);

};
#endif // _TERMIN_H
</code></pre>
<pre><code class="language-cpp">#ifndef _DATUMUHRZEIT_H
#define _DATUMUHRZEIT_H
#include &lt;string&gt;
#include &lt;iostream&gt;
#include &lt;fstream&gt;
#include &lt;time.h&gt;
#include &lt;stdio.h&gt;

using namespace std;

#define MINUTE 60
#define HOUR (MINUTE*60)
#define DAY (HOUR*24)
#define WEEK (DAY*7)

typedef long double Zeitspanne;  // Zeitspanne in Sekunden,

// Hilfsfunktion, um Integer nach string zu verwandeln
string int2string(int i, char *format = &quot;%i&quot;);

// ---------------------------------------------------
// Diese Klasse speichert einen Zeitpunkt und 
// bietet verschiedene Verarbeitungsmöglichkeiten.
// ---------------------------------------------------
// Datum und Uhrzeit mit Auflösung auf Sekundenebene,
// die Klasse wird realisiert über die Struktur tm aus time.h

class CDatumUhrzeit {

  protected:
    struct tm Zeit;

  public:
    //******** Konstruktoren ***************
    // erzeugt DatumUhrzeit mit aktuellem Zeitpunkt
    CDatumUhrzeit();

    // Kopierkonstruktor
    CDatumUhrzeit(const CDatumUhrzeit &amp;du);

    // erzeugt DatumUhrzeit mit Zeitpunkt in struct tm
    CDatumUhrzeit(struct tm zeit);

    //******** statische Methoden ***************
    // Verwandle Zeit in struct tm nach
    // Jahr/Monat/Tag Stunde/Minute/Sekunde
    static void convertTm2Zeit(struct tm, long&amp; jahr, int&amp; monat,
                       int&amp; tag, int&amp; std, int&amp; minute, int&amp; sec);

    // Verwandle Zeit von Jahr/Monat/Tag Stunde/Minute/Sekunde
    // in struct tm
    static void convertZeit2Tm(long jahr, int monat, int tag,
                        int std, int minute, int sec, struct tm&amp;);
    // Lade die aktuelle Zeit nach struct tm
    static struct tm now();

    //******** Set und Get Methoden ***************
    void setZeitpunkt(struct tm zeit);
    struct tm getZeitpunkt() const;
    void getZeitpunkt(long&amp; jahr, int&amp; monat, int&amp; tag, int&amp; std,
                                int&amp; minute, int&amp; sec) const;

    //******** andere Methoden ***************
    // Zeitpunkt als string in der Form &quot;01.01.2005 10:10:10&quot;
    // zurückgeben
    string toString() const;

    //******** Operatoren ***************
    CDatumUhrzeit &amp;operator=(const CDatumUhrzeit&amp;);
    bool operator&lt;(const CDatumUhrzeit&amp;) const;
    bool operator==(const CDatumUhrzeit&amp;) const;
    bool operator!=(const CDatumUhrzeit&amp;) const;

    CDatumUhrzeit &amp;operator+=(Zeitspanne);
    CDatumUhrzeit &amp;operator-=(Zeitspanne);
    Zeitspanne operator-(const CDatumUhrzeit&amp;);
    CDatumUhrzeit operator-(Zeitspanne);
    CDatumUhrzeit operator+(Zeitspanne);

    //******** Friend Operatoren ***************
    // Datum und Uhrzeit ausgeben in der Form &quot;01.01.2005 10:10:10&quot;
    friend ostream&amp; operator&lt;&lt;(ostream&amp;, const CDatumUhrzeit&amp;);

    // Datum und Uhrzeit einlesen in der Form &quot;01.01.2005 10:10:10&quot;
    // Bei Eingabe von Return wird der Zeitpunkt in 'du' übernommen.
    // Fehlende oder fehlerhafte Zahlen setzen Datumszahlen auf
    // vorhandene Zahlen in 'du', Uhrzeitzahlen auf 0.
    // Die (alte) Zeit in 'du' ist der Default.
    friend istream&amp; operator&gt;&gt;(istream&amp;, CDatumUhrzeit&amp; du);

    // Datum und Uhrzeit in eine Datei speichern
    // wird vorher in time_t verwandelt und mit '|' abgeschlossen
    friend ofstream&amp; operator&lt;&lt;(ofstream&amp;, const CDatumUhrzeit&amp;);

    // Datum und Uhrzeit aus einer Datei lesen
    // Wert wird in time_t gelesen und nach struct tm verwandelt,
    // '|' wird gelesen und verworfen
    friend ifstream&amp; operator&gt;&gt;(ifstream&amp;, CDatumUhrzeit&amp;);

};

#endif // _DATUMUHRZEIT_H
</code></pre>
<pre><code class="language-cpp">#ifndef _TERMINV_H
#define _TERMINV_H
#include &lt;list&gt;
#include &quot;termin.h&quot;

class CTerminV {

protected:
	list&lt;CTermin&gt; termine;
	string dateiName;

public:
	list&lt;CTermin&gt;::iterator getTerminIterator(const unsigned long _id);
	CTermin *getTermin(const unsigned long _id);
	void terminEinfuegen(CTermin &amp;t);
	bool terminLoeschen(const unsigned long _id);
	bool terminBearbeiten(CTermin &amp;t);
	std::string terminAnzeigen(const unsigned long _id);
	void getTermine(list&lt;CTermin&gt; &amp;_terminList, CDatumUhrzeit _von, CDatumUhrzeit _bis);
	std::string getDateiName();
	void setDateiName(std::string _s);
	bool terminListeSpeichern(std::string _dateiName);
	bool terminListeLaden();
};

#endif // _TERMINV_H
</code></pre>
<p>CDatumUhrzeit wurde uns komplett vom Dozenten vorgegeben wir mussten nur CTermin und CTerminV schreiben.</p>
<p>Soo jetzt pennen und morgen kümmer ich mich darum das das ding ohne crash läuft.<br />
Ich glaube es liegt nur noch daran, dass die ifstream operatoren von CTermin nicht richtig implementiert sind, denn er speichert die Terminedatums nicht als Timestamp sondern als lesbares Datum.</p>
<p>Du bist echt ne jute hilfe, ich muss aufpassen das ich nicht noch spaß an c++ bekomme, davor habe ich mich immer gefürchtet <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/1344642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1344642</guid><dc:creator><![CDATA[klimmpimm]]></dc:creator><pubDate>Tue, 14 Aug 2007 20:54:45 GMT</pubDate></item><item><title><![CDATA[Reply to Ich schlachte meinen C-Compiler!! (kompilierfehler) on Wed, 15 Aug 2007 13:16:07 GMT]]></title><description><![CDATA[<blockquote>
<p>std::ifstream einlesen(m_dateiName.c_str(), std::ios::in);<br />
if (!einlesen)</p>
</blockquote>
<p>... erstmal dazu:<br />
Warum noch eine extra Funktion aufrufen, wenn der Konstruktor das schon alles für dich regeln kann? Und if (!einlesen) solltest du auch if (einlese.is_open() == false) vorziehen. Der operator ! ist dafür extra da;) <a href="http://www.cplusplus.com/reference/iostream/ios/operatornot.html" rel="nofollow">http://www.cplusplus.com/reference/iostream/ios/operatornot.html</a> ...</p>
<p>So werd die Klasse jetzt stückchenweise ausbessern und dir dann posten...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1345048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1345048</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Wed, 15 Aug 2007 13:16:07 GMT</pubDate></item><item><title><![CDATA[Reply to Ich schlachte meinen C-Compiler!! (kompilierfehler) on Wed, 15 Aug 2007 13:40:56 GMT]]></title><description><![CDATA[<p>Hmm ... da mischt aber einer C und C++ ... ganz übel ... werd es mal korrigieren ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1345072</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1345072</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Wed, 15 Aug 2007 13:40:56 GMT</pubDate></item><item><title><![CDATA[Reply to Ich schlachte meinen C-Compiler!! (kompilierfehler) on Wed, 15 Aug 2007 14:55:00 GMT]]></title><description><![CDATA[<p>So ... ist nicht getestet ...</p>
<p><strong>Termin.h</strong></p>
<pre><code class="language-cpp">#if !defined TERMIN_H__INCLUDED
#define TERMIN_H__INCLUDED

#if (_MSC_VER &gt;= 1300)
#pragma once
#endif // (_MSC_VER &gt;= 1300)

class Termin
{
public:
	Termin() :	m_Begin(), m_Ende(m_Begin + 60 * 30), 
				m_Ort(&quot;Unbekannt&quot;), m_Name(&quot;Unbekannt&quot;), m_ID(0)
	{}

	operator std::string() const	{	return str(); }
	bool operator==(std::size_t id) const { return m_ID == id; }
	bool operator&lt;(const Termin&amp; obj) const { return (m_Anfang() &lt; obj.get_anfang() || m_Ende &lt; obj.get_ende() || m_Name &lt; obj.get_name() || m_ID &lt; obj.get_id());

	friend std::ofstream&amp; operator&lt;&lt;(std::ofstream&amp;, const Termin&amp;);
	friend std::ifstream&amp; operator&gt;&gt;(std::ifstream&amp;, Termin&amp;);
	friend std::istream&amp; operator&gt;&gt;(std::istream&amp; stream, Termin&amp;);

public:
	std::string const &amp;	get_ort() const { return m_Ort;		}
	std::string const &amp; get_name() const { return m_Name;	}
	std::string const &amp; get_beschreibung() const { return m_Beschreibung;	}
	DatumUhrzeit const &amp; get_anfang() const { return m_Anfang; }
	DatumUhrzeit const &amp; get_ende() const { return m_Ende; }
	std::size_t get_id() const { return m_ID; }

public:
	void set_ort(const std::string&amp; ort)					{ m_Ort = ort;	}
	void set_name(const std::string&amp; name)					{ m_Name = name; }
	void set_beschreibung(const std::string&amp; beschreibung)	{ m_Beschreibung = beschreibung;	}
	void set_anfang(const DatumUhrzeit&amp; anfang)				{ DatumUhrzeit::zeitspanne tmp = m_ende - m_anfang; m_Anfang = anfang;	m_Ende = anfang + tmp; }
	void set_ende(const DatumUhrzeit&amp; ende)					{ m_Ende = ende;	}
	void set_id()											{ m_ID = NEXT_ID; ++NEXT_ID;	}

public:
	std::string		data() const { std::ostringstream ss; ss &lt;&lt; &quot;ID: &quot; &lt;&lt; m_ID &lt;&lt; &quot;\n&quot; &lt;&lt; *this; return ss.str(); }
	std::string		str() const 
	{ 
		std::ostringstream ss; 
		ss	&lt;&lt; &quot;Name: &quot; &lt;&lt; m_Name &lt;&lt; &quot;\nOrt: &quot; &lt;&lt; m_Ort &lt;&lt; &quot;\nBeschreibung: &quot; &lt;&lt; m_Beschreibung 
			&lt;&lt; &quot;\nVon &quot; &lt;&lt; m_Begin &lt;&lt; &quot; bis &quot; &lt;&lt; m_Ende;
		return ss.str();
	}

public:
	static std::size_t	NEXT_ID;

private:
	std::string		m_Ort;
	std::string		m_Name;
	std::string		m_Beschreibung;
	DatumUhrzeit	m_Anfang;
	DatumUhrzeit	m_Ende;
	std::size_t		m_ID;
};

#endif // TERMIN_H__INCLUDED
</code></pre>
<p><strong>Termin.cpp</strong></p>
<pre><code class="language-cpp">std::size_t Termin::NEXT_ID = 1;

istream&amp; operator&gt;&gt;(std::istream&amp; stream, Termin&amp; termin)
{
	std::cout	&lt;&lt; &quot;.Neuer Termin\n&quot;
				&lt;&lt; &quot;-Name: &quot; &lt;&lt; std::flush;
	std::string tmp;
	std::getline(stream, tmp);
	termin.set_name(tmp);

	std::cout	&lt;&lt; &quot;-Ort: &quot; &lt;&lt; std::flush;
	std::getline(stream, tmp);
	termin.set_ort(tmp);

  	std::cout	&lt;&lt; &quot;-Beschreibung: &quot; &lt;&lt; std::flush;
	std::getline(stream, tmp);
	termin.set_beschreibung(tmp);

	std::cout	&lt;&lt; &quot;-Anfang: &quot; &lt;&lt; std::flush;
	DatumUhrzeit tmpDatumUhrzeit;
	stream &gt;&gt; tmpDatumUhrzeit;
	termin.set_anfang(tmpDatumUhrzeit);

	std::cout	&lt;&lt; &quot;-Dauer: &quot; &lt;&lt; std::flush;
	DatumUhrzeit::zeitspanne tmpZeitspanne;
	while (!(stream &gt;&gt; tmpZeitspanne)) { stream.clear(); stream.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), '\n'); }
	termin.set_ende(tmpDatumUhrzeit + tmpZeitspanne);
	termin.set_id();

    return stream;
}

std::ofstream&amp; operator&lt;&lt;(std::ofstream&amp; stream, const Termin&amp; termin) 
{
    stream	&lt;&lt; termin.get_id() &lt;&lt; &quot;|&quot; &lt;&lt; termin.get_anfang() &lt;&lt; &quot;|&quot; &lt;&lt; termin.get_ende() &lt;&lt; &quot;|&quot;
			&lt;&lt; termin.get_ort().length() + 1 &lt;&lt; &quot;|&quot; &lt;&lt; termin.get_ort() &lt;&lt; termin.get_name().length() + 1 &lt;&lt; &quot;|&quot; &lt;&lt; termin.get_name()
			&lt;&lt; termin.get_beschreibung().length() + 1 &lt;&lt; &quot;|&quot; &lt;&lt; termin.get_beschreibung();
    return stream;
}

std::ifstream&amp; operator&gt;&gt;(std::ifstream&amp; stream, Termin&amp; termin) 
{
	stream &gt;&gt; termin.m_ID;
	stream.seekg(sizeof(char), std::ios::cur);
	stream &gt;&gt; termin.m_Anfang;
	stream.seekg(sizeof(char), std::ios::cur);
	stream &gt;&gt; termin.m_Ende;

	/* Ort einlese */
	std::size_t length = 0;
	stream &gt;&gt; length;
	stream.seekg(sizeof(char), std::ios::cur);
	char* tmp = new char[length];
	stream.get(tmp, length);
	termin.m_Ort = tmp;
	delete [] tmp;

	stream &gt;&gt; length;
	stream.seekg(sizeof(char), std::ios::cur);
	tmp = new char[length];
	stream.get(tmp, length);
	termin.m_Name = tmp;
	delete [] tmp;

    stream &gt;&gt; length;
	stream.seekg(sizeof(char), std::ios::cur);
	tmp = new char[length];
	stream.get(tmp, length);
	termin.m_Beschreibung = tmp;
	delete [] tmp;

    return stream;
}
</code></pre>
<p>...</p>
<p>gleich kommt der Rest <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/1345135</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1345135</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Wed, 15 Aug 2007 14:55:00 GMT</pubDate></item><item><title><![CDATA[Reply to Ich schlachte meinen C-Compiler!! (kompilierfehler) on Wed, 15 Aug 2007 16:41:00 GMT]]></title><description><![CDATA[<p>Alter schwede zeile 18 ist ja einfach nur geil, bin noch nie auf die idee gekommen den || operator so zu nutzen, haste das aus nem buch oder woher ?</p>
<p>Muss jetzt erstma mein programm ans laufen bringen, danach werde ich mir den Rest von dir anschauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1345177</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1345177</guid><dc:creator><![CDATA[klimmmbimm]]></dc:creator><pubDate>Wed, 15 Aug 2007 16:41:00 GMT</pubDate></item><item><title><![CDATA[Reply to Ich schlachte meinen C-Compiler!! (kompilierfehler) on Wed, 15 Aug 2007 17:03:40 GMT]]></title><description><![CDATA[<p>Hmm ne das hab ich nicht aus nem Buch <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="😉"
    /> Soll ich ganz ehrlich sein? Ich hab als 7 Jähriger mal nen Buch gehabt ... hab da die Codes schnell abgetippt ... hab aber 0 verstanden ^^ Dann hab ich mir später mal Code angeguckt und festgestellt das es net so schwer ist ... hab dann mehrere Projekte gestartet ... hab dann bei jedem was gelernt ... hatte dann einen, der mir schonmal wennich garnicht weiter kam schnell geholfen hat(icq) ... bin mittlerweile <strong>etwas</strong>, nicht viel älter und behersche die Sprache, meines erachtens nach, einigermaßen ...</p>
<p>Wenn de willst kannst mir das Projekt am Ende zuschicken dann korrigier ich dir das mal und mach nen paar Schönheitsfehler raus ... aber guck halt immer, dass du den Code auch verstehst!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1345185</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1345185</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Wed, 15 Aug 2007 17:03:40 GMT</pubDate></item><item><title><![CDATA[Reply to Ich schlachte meinen C-Compiler!! (kompilierfehler) on Wed, 15 Aug 2007 18:52:04 GMT]]></title><description><![CDATA[<p>Es läuffftt!!!<br />
Nur noch ein paar Kleinigkeiten fehlen mir:</p>
<p>1.Wenn ich einen neuen Termin anlegen will passiert folgendes:</p>
<p>Der Compiler springt immer über die <strong>Zeile 209 von CDatumUhrzeit</strong>, wenn er den Beginn des Termins einlesen soll und verpasst dem Beginn des Termins dann das Tagesdatum.</p>
<p>Beim einlesen von Ende (ist ja der nächste Schritt) ist alles gleich so wie es aussieht, aber da macht er es nicht.</p>
<p>2. Wenn ich termine.sort() aufrufe kackt er immer ab, ich bin da mit dem debugger nicht weiter gekommen, da sieht für mich alles normal aus.</p>
<p>Ich kann dir das Ergebnis gerne schicken, am besten per mail dann muss ich es nit immer posten und du es nicht kopieren.<br />
Aber die Schönheitsfehler stören mich nicht, ich bin halt ein c++ noob da macht man nunmal nicht alles optimal.<br />
Ich weiß das ich hier und da ne Zeile zuviel eingebaut habe, aber hauptsache mein java code sieht nicht so aus <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="😉"
    /><br />
Das mit dem return x || y || z fand ich schon super, da hab ich echt was von dir gelernt.</p>
<p>Und mal ein tipp von mir, du kannst zwar ein paar lines of code sparen wenn du solche konstrukte wie</p>
<pre><code class="language-cpp">void set_anfang(const DatumUhrzeit&amp; anfang)                { DatumUhrzeit::zeitspanne tmp = m_ende - m_anfang; m_Anfang = anfang;    m_Ende = anfang + tmp; }
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">stream    &lt;&lt; termin.get_id() &lt;&lt; &quot;|&quot; &lt;&lt; termin.get_anfang() &lt;&lt; &quot;|&quot; &lt;&lt; termin.get_ende() &lt;&lt; &quot;|&quot;
            &lt;&lt; termin.get_ort().length() + 1 &lt;&lt; &quot;|&quot; &lt;&lt; termin.get_ort() &lt;&lt; termin.get_name().length() + 1 &lt;&lt; &quot;|&quot; &lt;&lt; termin.get_name()
            &lt;&lt; termin.get_beschreibung().length() + 1 &lt;&lt; &quot;|&quot; &lt;&lt; termin.get_beschreibung();
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">while (!(stream &gt;&gt; tmpZeitspanne)) { stream.clear(); stream.ignore(std::numeric_limits&lt;std::streamsize&gt;::max(), '\n'); }
</code></pre>
<p>machst, aber das ist einfach schlechter lesbar vorallem wenn du in einem team arbeitest machst du dir damit keine freunde, bzw es wird gar nicht erst geduldet denn da wird eh alles vorm einchecken ins repository durch nen formatter zerpflückt.<br />
Es spart dir auch keine Zeit, denn wenn du später mal an deinem eigenen Code was machst brauchst du auch länger um das zu lesen.</p>
<p>Mir was für ner IDE arbeitest du eigentlich ?</p>
<p>Hier ist meine icq nr 71877936, dann schick ich dir darüber den code.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1345225</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1345225</guid><dc:creator><![CDATA[klimmmbimm]]></dc:creator><pubDate>Wed, 15 Aug 2007 18:52:04 GMT</pubDate></item><item><title><![CDATA[Reply to Ich schlachte meinen C-Compiler!! (kompilierfehler) on Wed, 15 Aug 2007 18:59:55 GMT]]></title><description><![CDATA[<p>Wer mit mir in einem Team arbeitet erkennt bsw. das</p>
<pre><code class="language-cpp">while (!(stream &gt;&gt; tmpZeitspanne))
</code></pre>
<p>... jetzt folgt die Fehlerbehebung ... das ist da unnötig jedesmal nen großesn COde draus zu machen ... man kann es höchstensin nen Template packen...</p>
<blockquote>
<p>Mir was für ner IDE arbeitest du eigentlich ?</p>
</blockquote>
<p>Microsoft Visual C++ 2005 und Microsoft Visual C++ 2003 ... Microsoft Editor(ok ist keine IDE <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>Aber die Schönheitsfehler stören mich nicht, ich bin halt ein c++ noob da macht man nunmal nicht alles optimal.<br />
Ich weiß das ich hier und da ne Zeile zuviel eingebaut habe, aber hauptsache mein java code sieht nicht so aus <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>Nja aber solche Fehler sind potentizielle Bugs ... d.h. solltest du immer auf höchstem Warnungsniveau compilieren und selbst dann, wenn es geht, sogar Warnungen als Fehler ansehen lassen!</p>
<p>Werd mich morgen bei dirmelden ... hab heute keine Zeit für dich ... sorry ... aja ... deine ICQ-Nummer ist falsch. ICQ-Nummern bestehen aus 9 Ziffern ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1345229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1345229</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Wed, 15 Aug 2007 18:59:55 GMT</pubDate></item></channel></rss>