<?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[Problem bei Linienverwaltung]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>sry ich bins schonwieder mit meinem snake spiel.</p>
<p>Ich habe bereits einiges hier erfahren, vor allem bezüglich der bewegung der schlange.</p>
<p>Zum bewegen und rendern der schlange nehme ich Linien.<br />
Also habe ich eine eigene Linien Klasse geschrieben:</p>
<p>Line.h:</p>
<pre><code class="language-cpp">#define LINE_ERROR_EOL			-1
#define LINE_ERROR_FATAL_ERROR	-2
#define LINE_OK					0

// Klasse zum speichern der Position der Schlange
class CSnakeLine
{
public:
	CSnakeLine();
	~CSnakeLine();

	void SetNewElement(tbVector3 const&amp; v, bool const&amp; bFirst = false);

	void ResetPos();
	bool ResetFirstPos(tbVector3 const&amp; vFirstPos);
	bool SetPos(tbVector3 const&amp; vPos);
	tbVector3 GetNextPos(float fDif, int *iError = NULL);

	void Init();
	void Uninit();

private:
	unsigned long int m_iNumOfElements;
	unsigned long int m_iMaxNumOfElements;
	unsigned long int m_iCurrentElement;
	tbVector3 *m_pvLineElement;
	tbVector3 *m_pvLineDir;
	tbVector3 m_vPos;
};

bool PointIsOnLine(tbVector3 vLineStart, tbVector3 vLineEnd, tbVector3 vPoint, float fTollerance = 0.0f);
</code></pre>
<p>Line.cpp:</p>
<pre><code class="language-cpp">//Konstruktor
CSnakeLine::CSnakeLine() : m_iNumOfElements(0), m_iMaxNumOfElements(0)
{
	Init();
}

// Destruktor
CSnakeLine::~CSnakeLine()
{
	Uninit();
}

// Fügt ein neues Element hinzu
void CSnakeLine::SetNewElement(tbVector3 const&amp; v, bool const&amp; bFirst)
{
	if((m_iNumOfElements + 1) &gt;= m_iMaxNumOfElements)
	{
		m_pvLineElement = (tbVector3 *) tbMemReAlloc((void *) m_pvLineElement, sizeof(tbVector3) * (m_iMaxNumOfElements + 126));
		m_pvLineDir = (tbVector3 *) tbMemReAlloc((void *) m_pvLineDir, sizeof(tbVector3) * (m_iMaxNumOfElements + 126));
		m_iMaxNumOfElements += 126;
	}

	m_pvLineElement[m_iNumOfElements] = v;

	if(!bFirst)
		m_pvLineDir[m_iNumOfElements] = tbVector3Normalize(m_pvLineElement[m_iNumOfElements] - m_pvLineElement[m_iNumOfElements-1]);

	m_iNumOfElements++;
}

// Setzt die Position in der Linie zurück auf den Anfang
void CSnakeLine::ResetPos()
{
	m_vPos = m_pvLineElement[0];
	m_iCurrentElement = 0;
}

// Setzt die erste Position der Linie auf vFirstPos
bool CSnakeLine::ResetFirstPos(tbVector3 const&amp; vFirstPos)
{
	if(m_iNumOfElements &gt;= 2)
	{
		m_pvLineElement[0] = vFirstPos;
		m_pvLineDir[1] = m_pvLineElement[1] - m_pvLineElement[0];
		return true;
	}

	return false;
}

// Setzt die Position
bool CSnakeLine::SetPos(const tbVector3 &amp;vPos)
{
	for(unsigned long int i = 0; i &lt; m_iNumOfElements; i ++)
	{
		if(PointIsOnLine(m_pvLineElement[i], m_pvLineElement[i+1], vPos, 0.1f))
		{
			m_vPos = vPos;
			return true;
		}
	}

	ResetPos();

	return false;
}

// Liefert die nächste Position auf der Linie mit dem abstand fDif zurück
tbVector3 CSnakeLine::GetNextPos(float fDif, int *iError)
{
	bool bFound = false;
	tbVector3 vTemp;

	vTemp = m_vPos + m_pvLineDir[m_iCurrentElement+1] * fDif;							// Neue Position berechnen

	while(!PointIsOnLine(m_pvLineElement[m_iCurrentElement], m_pvLineElement[m_iCurrentElement+1], vTemp, 0.1f))
	{
		if(m_iCurrentElement + 1 &gt;= m_iNumOfElements)
		{
			*iError = LINE_ERROR_EOL;
			ResetPos();
			return m_vPos;
		}

		fDif -= tbVector3Length(vTemp - m_pvLineElement[m_iCurrentElement+1]);

		m_iCurrentElement++;

		vTemp = m_pvLineElement[m_iCurrentElement] + m_pvLineDir[m_iCurrentElement] * fDif;					// Neue Position berechnen
	}

	m_vPos = vTemp;
	*iError = LINE_OK;

	return m_vPos;
}
// Initialisiert die Linie
void CSnakeLine::Init()
{
	m_pvLineElement = (tbVector3 *) tbMemAlloc(sizeof(tbVector3) * 256);
	m_pvLineDir = (tbVector3 *) tbMemAlloc(sizeof(tbVector3) * 256);
	m_iMaxNumOfElements = 256;
}
// Entinitialisiert die Linie
void CSnakeLine::Uninit()
{
	TB_SAFE_MEMFREE(m_pvLineElement);
	TB_SAFE_MEMFREE(m_pvLineDir);
}

// Berechnet ob der Punkt vPoint auf der Streke von vLineStart bis vLineEnd liegt
bool PointIsOnLine(tbVector3 vLineStart, tbVector3 vLineEnd, tbVector3 vPoint, float fTollerance)
{
	float fSX;
	float fSY;
	float fSZ;

	fSX = (vPoint.x - vLineStart.x) / vLineEnd.x;

	if(fSX &lt; 0 - fTollerance || fSX &gt; 1 + fTollerance)
		return false;

	fSY = (vPoint.y - vLineStart.y) / vLineEnd.y;

	if(fSY &lt; 0 - fTollerance || fSY &gt; 1 + fTollerance)
		return false;

	if(fSX &lt; fSY - fTollerance || fSX &gt; fSY + fTollerance)
		return false;

	fSZ = (vPoint.z - vLineStart.z) / vLineEnd.z;

	if(fSZ &lt; 0 - fTollerance || fSZ &gt; 1 + fTollerance)
		return false;

	if(!(fSY &lt; fSZ - fTollerance || fSY &gt; fSZ + fTollerance))
		return true;

	return false;
}
</code></pre>
<p>irgendetwas verursacht immer den Fehler LINE_ERROR_EOL (EOL steht für End Of Line).</p>
<p>Ich habe keinen blassen schimmer was ich falsch gemacht habe.</p>
<p>Ich hoffe ihr könnt mir helfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/230187/problem-bei-linienverwaltung</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 10:14:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/230187.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 22 Dec 2008 09:01:36 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem bei Linienverwaltung on Mon, 22 Dec 2008 09:02:09 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>sry ich bins schonwieder mit meinem snake spiel.</p>
<p>Ich habe bereits einiges hier erfahren, vor allem bezüglich der bewegung der schlange.</p>
<p>Zum bewegen und rendern der schlange nehme ich Linien.<br />
Also habe ich eine eigene Linien Klasse geschrieben:</p>
<p>Line.h:</p>
<pre><code class="language-cpp">#define LINE_ERROR_EOL			-1
#define LINE_ERROR_FATAL_ERROR	-2
#define LINE_OK					0

// Klasse zum speichern der Position der Schlange
class CSnakeLine
{
public:
	CSnakeLine();
	~CSnakeLine();

	void SetNewElement(tbVector3 const&amp; v, bool const&amp; bFirst = false);

	void ResetPos();
	bool ResetFirstPos(tbVector3 const&amp; vFirstPos);
	bool SetPos(tbVector3 const&amp; vPos);
	tbVector3 GetNextPos(float fDif, int *iError = NULL);

	void Init();
	void Uninit();

private:
	unsigned long int m_iNumOfElements;
	unsigned long int m_iMaxNumOfElements;
	unsigned long int m_iCurrentElement;
	tbVector3 *m_pvLineElement;
	tbVector3 *m_pvLineDir;
	tbVector3 m_vPos;
};

bool PointIsOnLine(tbVector3 vLineStart, tbVector3 vLineEnd, tbVector3 vPoint, float fTollerance = 0.0f);
</code></pre>
<p>Line.cpp:</p>
<pre><code class="language-cpp">//Konstruktor
CSnakeLine::CSnakeLine() : m_iNumOfElements(0), m_iMaxNumOfElements(0)
{
	Init();
}

// Destruktor
CSnakeLine::~CSnakeLine()
{
	Uninit();
}

// Fügt ein neues Element hinzu
void CSnakeLine::SetNewElement(tbVector3 const&amp; v, bool const&amp; bFirst)
{
	if((m_iNumOfElements + 1) &gt;= m_iMaxNumOfElements)
	{
		m_pvLineElement = (tbVector3 *) tbMemReAlloc((void *) m_pvLineElement, sizeof(tbVector3) * (m_iMaxNumOfElements + 126));
		m_pvLineDir = (tbVector3 *) tbMemReAlloc((void *) m_pvLineDir, sizeof(tbVector3) * (m_iMaxNumOfElements + 126));
		m_iMaxNumOfElements += 126;
	}

	m_pvLineElement[m_iNumOfElements] = v;

	if(!bFirst)
		m_pvLineDir[m_iNumOfElements] = tbVector3Normalize(m_pvLineElement[m_iNumOfElements] - m_pvLineElement[m_iNumOfElements-1]);

	m_iNumOfElements++;
}

// Setzt die Position in der Linie zurück auf den Anfang
void CSnakeLine::ResetPos()
{
	m_vPos = m_pvLineElement[0];
	m_iCurrentElement = 0;
}

// Setzt die erste Position der Linie auf vFirstPos
bool CSnakeLine::ResetFirstPos(tbVector3 const&amp; vFirstPos)
{
	if(m_iNumOfElements &gt;= 2)
	{
		m_pvLineElement[0] = vFirstPos;
		m_pvLineDir[1] = m_pvLineElement[1] - m_pvLineElement[0];
		return true;
	}

	return false;
}

// Setzt die Position
bool CSnakeLine::SetPos(const tbVector3 &amp;vPos)
{
	for(unsigned long int i = 0; i &lt; m_iNumOfElements; i ++)
	{
		if(PointIsOnLine(m_pvLineElement[i], m_pvLineElement[i+1], vPos, 0.1f))
		{
			m_vPos = vPos;
			return true;
		}
	}

	ResetPos();

	return false;
}

// Liefert die nächste Position auf der Linie mit dem abstand fDif zurück
tbVector3 CSnakeLine::GetNextPos(float fDif, int *iError)
{
	bool bFound = false;
	tbVector3 vTemp;

	vTemp = m_vPos + m_pvLineDir[m_iCurrentElement+1] * fDif;							// Neue Position berechnen

	while(!PointIsOnLine(m_pvLineElement[m_iCurrentElement], m_pvLineElement[m_iCurrentElement+1], vTemp, 0.1f))
	{
		if(m_iCurrentElement + 1 &gt;= m_iNumOfElements)
		{
			*iError = LINE_ERROR_EOL;
			ResetPos();
			return m_vPos;
		}

		fDif -= tbVector3Length(vTemp - m_pvLineElement[m_iCurrentElement+1]);

		m_iCurrentElement++;

		vTemp = m_pvLineElement[m_iCurrentElement] + m_pvLineDir[m_iCurrentElement] * fDif;					// Neue Position berechnen
	}

	m_vPos = vTemp;
	*iError = LINE_OK;

	return m_vPos;
}
// Initialisiert die Linie
void CSnakeLine::Init()
{
	m_pvLineElement = (tbVector3 *) tbMemAlloc(sizeof(tbVector3) * 256);
	m_pvLineDir = (tbVector3 *) tbMemAlloc(sizeof(tbVector3) * 256);
	m_iMaxNumOfElements = 256;
}
// Entinitialisiert die Linie
void CSnakeLine::Uninit()
{
	TB_SAFE_MEMFREE(m_pvLineElement);
	TB_SAFE_MEMFREE(m_pvLineDir);
}

// Berechnet ob der Punkt vPoint auf der Streke von vLineStart bis vLineEnd liegt
bool PointIsOnLine(tbVector3 vLineStart, tbVector3 vLineEnd, tbVector3 vPoint, float fTollerance)
{
	float fSX;
	float fSY;
	float fSZ;

	fSX = (vPoint.x - vLineStart.x) / vLineEnd.x;

	if(fSX &lt; 0 - fTollerance || fSX &gt; 1 + fTollerance)
		return false;

	fSY = (vPoint.y - vLineStart.y) / vLineEnd.y;

	if(fSY &lt; 0 - fTollerance || fSY &gt; 1 + fTollerance)
		return false;

	if(fSX &lt; fSY - fTollerance || fSX &gt; fSY + fTollerance)
		return false;

	fSZ = (vPoint.z - vLineStart.z) / vLineEnd.z;

	if(fSZ &lt; 0 - fTollerance || fSZ &gt; 1 + fTollerance)
		return false;

	if(!(fSY &lt; fSZ - fTollerance || fSY &gt; fSZ + fTollerance))
		return true;

	return false;
}
</code></pre>
<p>irgendetwas verursacht immer den Fehler LINE_ERROR_EOL (EOL steht für End Of Line).</p>
<p>Ich habe keinen blassen schimmer was ich falsch gemacht habe.</p>
<p>Ich hoffe ihr könnt mir helfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633929</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633929</guid><dc:creator><![CDATA[Yazoo]]></dc:creator><pubDate>Mon, 22 Dec 2008 09:02:09 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Linienverwaltung on Mon, 22 Dec 2008 10:06:14 GMT]]></title><description><![CDATA[<p>Glaubs du ersnthaft, dass sich einer deinen ganzen Code durchschaut, um den Fehler zu finden? - Du schreibst nichteinmal, wo genau der Fehler herkommt, was du mit einem Debugger innerhalbt von 2 Minuten rausfinden kannst.</p>
<p>Im übrigen sehe ich keine Zeile Anwendungscode. Du hast lediglich eine Klasse gepostet, mit der wir herzlich wenig anfangen können.</p>
<p>Reduzier deinen Code auf das nötigste und mache eine genaue, wenn möglich lauffähige Version deines Problemes, damit wir das ganze nachvollziehen können. Ansonsten wird hier kaum jemand antworten..</p>
<p>EDIT:<br />
Ich will mal nicht so sein. In deinem Code ist die einzige Funktion, die etwas mit diesem Status macht GetNextPos, also wird der Fehler wohl dort drin sein.. Benutz einfach deinen Debugger. Der ist Gold Wert!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633943</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633943</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 22 Dec 2008 10:06:14 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Linienverwaltung on Mon, 22 Dec 2008 10:26:03 GMT]]></title><description><![CDATA[<p>Außerdem macht es das nicht leichter, dass Du anscheinend eine API verwendest (das ganze &quot;tb...&quot;-Zeug), uns aber nicht mitteilst, welche.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633948</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633948</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 22 Dec 2008 10:26:03 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Linienverwaltung on Mon, 22 Dec 2008 10:45:46 GMT]]></title><description><![CDATA[<p><a href="https://www.google.de/search?&amp;q=debuggen" rel="nofollow">Google: debuggen</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1633956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1633956</guid><dc:creator><![CDATA[ProfiTipp]]></dc:creator><pubDate>Mon, 22 Dec 2008 10:45:46 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Linienverwaltung on Mon, 22 Dec 2008 13:03:06 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">//ein Bit per const ref übergeben ?!
   void SetNewElement(tbVector3 const&amp; v, bool const&amp; bFirst = false); 

//schon mal was von exceptions gehört?
    tbVector3 GetNextPos(float fDif, int *iError = NULL); 

//idR wird so was Destruct oder so genannt
    void Uninit(); 

private: 
//nicht gerade schön: (wieso pointer?)
    tbVector3 *m_pvLineElement; 
    tbVector3 *m_pvLineDir; 
    tbVector3 m_vPos; 
};
</code></pre>
<p>Imho wäre hier eine std::deque &lt;tbVector3&gt; viel besser angebracht - aber ich hab jz auch nciht alles durchgeguckt sondern den code nur überflogen - und hoffe lang genug, um verstanden zu haben, wie du das ganze machst ^^</p>
<pre><code class="language-cpp">//und hier übergibst du halt einfach mal alles per value obwohl du oben noch wusstest, wie das mit der const ref geht...
bool PointIsOnLine(tbVector3 vLineStart, tbVector3 vLineEnd, tbVector3 vPoint, float fTollerance = 0.0f);
</code></pre>
<pre><code class="language-cpp">{
    float fSX;
    float fSY;
    float fSZ;
</code></pre>
<p>Variable deklariert man erst dann, wenn man sie auch braucht (und gleich definieren kann...)</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634046</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634046</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 22 Dec 2008 13:03:06 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Linienverwaltung on Mon, 22 Dec 2008 14:56:28 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>Außerdem macht es das nicht leichter, dass Du anscheinend eine API verwendest (das ganze &quot;tb...&quot;-Zeug), uns aber nicht mitteilst, welche.</p>
<p>Gruß,</p>
<p>Simon2.</p>
</blockquote>
<p>Hehe. Das ist die Tribase-Engine von David Scherfgen. <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/1634134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634134</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 22 Dec 2008 14:56:28 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Linienverwaltung on Mon, 22 Dec 2008 15:22:20 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Außerdem macht es das nicht leichter, dass Du anscheinend eine API verwendest (das ganze &quot;tb...&quot;-Zeug), uns aber nicht mitteilst, welche.</p>
<p>Gruß,</p>
<p>Simon2.</p>
</blockquote>
<p>Hehe. Das ist die Tribase-Engine von David Scherfgen. <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>Aha - das ist ja wenigstens mal was, was ich in google eingeben kann... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634155</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634155</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 22 Dec 2008 15:22:20 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Linienverwaltung on Mon, 22 Dec 2008 15:40:52 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>drakon schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<p>Außerdem macht es das nicht leichter, dass Du anscheinend eine API verwendest (das ganze &quot;tb...&quot;-Zeug), uns aber nicht mitteilst, welche.</p>
<p>Gruß,</p>
<p>Simon2.</p>
</blockquote>
<p>Hehe. Das ist die Tribase-Engine von David Scherfgen. <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>Aha - das ist ja wenigstens mal was, was ich in google eingeben kann... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Gruß,</p>
<p>Simon2.</p>
</blockquote>
<p><a href="http://www.scherfgen-software.net/index.php?action=book&amp;subsite=errata" rel="nofollow">http://www.scherfgen-software.net/index.php?action=book&amp;subsite=errata</a></p>
<p>Gibts aber nur mit dem Buch dazu. <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 />
Aber die Funktionen/Klassen, die er da benutzt hat sind eigentlich selbstsprechend und sollten klar sein, was sie machen. <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="😉"
    /> - tbVector3 ist halt ein 3D Vektor, das MemFree sollte auch klar sein. Und das Realloc sollte auch klar sein, was es in etwa macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1634166</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634166</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 22 Dec 2008 15:40:52 GMT</pubDate></item><item><title><![CDATA[Reply to Problem bei Linienverwaltung on Tue, 23 Dec 2008 16:30:47 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">#define LINE_ERROR_EOL            -1 
#define LINE_ERROR_FATAL_ERROR    -2 
#define LINE_OK                    0
</code></pre>
<p>Das ist ziemlich unschön. Wieso machst du es nicht mit <code>enum</code> ?</p>
<pre><code class="language-cpp">enum LINE_ERROR_TYPE  // du hast gleich einen Typen für deine Fehler
{
    LINE_ERROR_EOL         = -1,
    LINE_ERROR_FATAL_ERROR = -2,
    LINE_OK                = 0
};
</code></pre>
<p>Ich hab jetzt mal deine Grossschreibweise übernommen, normalerweise würde ich das anders machen. <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/1634726</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1634726</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 23 Dec 2008 16:30:47 GMT</pubDate></item></channel></rss>