<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Includes scheinen nicht richtig zu funktionieren (unerkärlicher Fehler!)]]></title><description><![CDATA[<p>Hallo.</p>
<p>Ich beginne gerade damit die basis für ein kleines Spiel zu schreiben.</p>
<p>Soweit funktioniert das ganze bis jetzt auch! Aber jetzt habe ich die Klasse World hinzugefügt und jetzt auf einmal funktonieren die includes in der Datei World.h nicht mehr richtig.</p>
<p>Ich habe in der Date Block_Container.h den Datentyp Bit25 (bitset&lt;25&gt;) definiert.</p>
<p>Diesen verwende ich auch so in World.h in diesem Ausschnitt:</p>
<pre><code class="language-cpp">#pragma once

#include &lt;map&gt;
#include &lt;utility&gt;
#include &quot;Block_Container.h&quot;

using namespace std;

typedef map&lt;Bit25, Block_Container&gt;::iterator WorldIter;

class World
{
private:
	map&lt;Bit25, Block_Container&gt; Welt;
        //Ab hier unwichtig!
};
</code></pre>
<p>Außerdem kennt er angeblich die Klasse Block_Container nicht!</p>
<p>Ich vermute, da hat irgendetwas mit den includes nicht geklappt.</p>
<p>Hier meine restlichen Dateien:</p>
<p>World.cpp:</p>
<pre><code class="language-cpp">#include &quot;World.h&quot;

World::World()
{
}

World::~World()
{
}

void World::add(int x, int y, int z)
{
	World::add(x, y, z, 0, 0, 0);
}

void World::add(int x, int y, int z, int ID, int Sub_ID, int direction)
{
	Bit25 pos;

	if((x &lt; 0) || (x &gt; 511))
	{
		throw(BF_Error(1, 1));
	}
	else
	{
		Bit25 tmp = (x &amp; 511);

		pos |= tmp;
	}

	if((y &lt; 0) || (y &gt; 511))
	{
		throw(BF_Error(1, 2));
	}
	else
	{
		Bit25 tmp = (y &amp; 511);

		pos &lt;&lt;= 9;
		pos |= tmp;
	}

	if((z &lt; 0) || (z &gt; 127))
	{
		throw(BF_Error(1, 3));
	}
	else
	{
		Bit25 tmp = (z &amp; 127);

		pos &lt;&lt;= 7;
		pos |= tmp;
	}

	WorldIter it = Welt.find(pos);

	if(it != Welt.end())
	{
		Welt[pos] = Block_Container(x, y, z, ID, Sub_ID, direction, this);
	}
	else
	{
		throw(BF_Error(2));
	}
}
</code></pre>
<p>World.h:</p>
<pre><code class="language-cpp">#pragma once

#include &lt;map&gt;
#include &lt;utility&gt;
#include &quot;Block_Container.h&quot;
#include &quot;BF_Error.h&quot;

using namespace std;

typedef map&lt;Bit25, Block_Container&gt;::iterator WorldIter;

class World
{
private:
	map&lt;Bit25, Block_Container&gt; Welt;

public:
	World();
	~World();

	void add(int x, int y, int z);
	void add(int x, int y, int z, int ID, int Sub_ID, int direction);
};
</code></pre>
<p>Block_Container.cpp:</p>
<pre><code class="language-cpp">#include &quot;Block_Container.h&quot;
#include &lt;iostream&gt;
#include &quot;BF_Error.h&quot;

using namespace std;

Block_Container::Block_Container()
{
	Block_Container::data = 0;
	Block_Container::world = NULL;
}

Block_Container::Block_Container(int x, int y, int z, int ID, int Sub_ID, int direction, World &amp;welt)
{
	if((x &lt; 0) || (x &gt; 511))
	{
		throw(BF_Error(1, 1));
	}
	else
	{
		Bit25 tmp = (x &amp; 511);

		Block_Container::pos |= tmp;
	}

	if((y &lt; 0) || (y &gt; 511))
	{
		throw(BF_Error(1, 2));
	}
	else
	{
		Bit25 tmp = (y &amp; 511);

		Block_Container::pos &lt;&lt;= 9;
		Block_Container::pos |= tmp;
	}

	if((z &lt; 0) || (z &gt; 127))
	{
		throw(BF_Error(1, 3));
	}
	else
	{
		Bit25 tmp = (z &amp; 127);

		Block_Container::pos &lt;&lt;= 7;
		Block_Container::pos |= tmp;
	}

	if((ID &lt; 0) || (ID &gt; 2047))
	{
		throw(BF_Error(1, 4));
	}
	else
	{
		Bit20 tmp = (ID &amp; 2047);

		Block_Container::data |= tmp;
	}

	if((Sub_ID &lt; 0) || (Sub_ID &gt; 127))
	{
		throw(BF_Error(1, 5));
	}
	else
	{
		Bit20 tmp = (Sub_ID &amp; 127);

		Block_Container::data &lt;&lt;= 7;
		Block_Container::data |= tmp;
	}

	if((direction &lt; 0) || (direction &gt; 3))
	{
		throw(BF_Error(1, 6));
	}
	else
	{
		Bit20 tmp = (direction &amp; 3);

		Block_Container::data &lt;&lt;= 2;
		Block_Container::data |= tmp;
	}

	Block_Container::world = &amp;welt;
}

 Block_Container::~Block_Container()
 {
	 //delete Block_Container::block;
 }

int Block_Container::get_direction()
{
	return (int) (Block_Container::data &amp; ((Bit20) 3)).to_ulong();
}

int Block_Container::get_x_Coord()
{
	return (int) ((Block_Container::pos &gt;&gt; 16) &amp; ((Bit25) 511)).to_ulong();
}

int Block_Container::get_y_Coord()
{
	return (int) ((Block_Container::pos &gt;&gt; 7) &amp; ((Bit25) 511)).to_ulong();
}

int Block_Container::get_z_Coord()
{
	return (int) (Block_Container::pos &amp; ((Bit25) 127)).to_ulong();
}

int Block_Container::get_ID()
{
	return (int) ((Block_Container::data &gt;&gt; 9) &amp; ((Bit20) 2047)).to_ulong();
}

int Block_Container::get_Sub_ID()
{
	return (int) ((Block_Container::data &gt;&gt; 2) &amp; ((Bit20) 127)).to_ulong();
}
</code></pre>
<p>Block_Container.h:</p>
<pre><code class="language-cpp">#pragma once

#include &lt;bitset&gt;
#include &quot;World.h&quot;

using namespace std;

typedef bitset&lt;25&gt; Bit25;
typedef bitset&lt;20&gt; Bit20;

class Block_Container
{
private:
	Bit25 pos;																		//Position
	Bit20 data;																		//Container

	//Block *block;	//Noch nicht vorhanden!																//Block-Container

	World *world;

	void update();																	//Update des Blocks

public:

	Block_Container();
	Block_Container(int x, int y, int z, int ID, int Sub_ID, int direction, World &amp;welt);	//Construktoren

	~Block_Container();																//Destruktor

	int get_x_Coord();																//Get-Funktionen
	int get_y_Coord();
	int get_z_Coord();
	int get_ID();
	int get_Sub_ID();
	int get_direction();

	void set_ID(int ID);															//Set-Funktionen
	void set_Sub_ID(int Sub_ID);

	void sleep();											//Setzt die Klasse in den &quot;Stand-by&quot;-Modus
	void wake_up();											//Reaktiviert die Klasse
};
</code></pre>
<p>BF_Error.cpp:</p>
<pre><code class="language-cpp">#include &quot;BF_Error.h&quot;
#include &lt;sstream&gt;

void BF_Error::fill_information()
{
	switch(BF_Error::code)
	{
	case 0: BF_Error::desc = &quot;Unbekannter Fehler&quot;;
			BF_Error::large_desc = &quot;Es stehen keinerlei Informationen zur Verfuegung!&quot;;
			break;
	case 1: BF_Error::desc = &quot;Argumene ausserhalb der Grenze&quot;;
			BF_Error::large_desc = &quot;Sie haben einer Funktion ein Argument uebergeben, dass ausserhalb des zulaessigen Wertbereichs lag!&quot;;
			break;
	case 2: BF_Error::desc = &quot;Position bereits vorhanden!&quot;;
			BF_Error::large_desc = &quot;Die Position, die Sie versucht haben hinzuzufügen existiert bereits!&quot;;
			break;
	default:BF_Error::desc = &quot;Unbekannter Fehler&quot;;
			BF_Error::large_desc = &quot;Es stehen keinerlei Informationen zur Verfuegung!&quot;;
			break;
	}

	switch(BF_Error::extra_code)
	{
	case 0: BF_Error::extra = &quot;&quot;;
			BF_Error::large_extra = &quot;&quot;;
			break;
	case 1: BF_Error::extra = &quot;x-Position&quot;;
			BF_Error::large_extra = &quot;Der Fehler trat im Zusammenhang mit der x-Position auf.&quot;;
			break;
	case 2: BF_Error::extra = &quot;y-Position&quot;;
			BF_Error::large_extra = &quot;Der Fehler trat im Zusammenhang mit der y-Position auf.&quot;;
			break;
	case 3: BF_Error::extra = &quot;z-Position&quot;;
			BF_Error::large_extra = &quot;Der Fehler trat im Zusammenhang mit der z-Position auf.&quot;;
			break;
	case 4: BF_Error::extra = &quot;ID&quot;;
			BF_Error::large_extra = &quot;Der Fehler trat im Zusammenhang mit der ID auf.&quot;;
			break;
	case 5: BF_Error::extra = &quot;Sub_ID&quot;;
			BF_Error::large_extra = &quot;Der Fehler trat im Zusammenhang mit der Sub_ID auf.&quot;;
			break;
	case 6: BF_Error::extra = &quot;direction&quot;;
			BF_Error::large_extra = &quot;Der Fehler trat im Zusammenhang mit der Richtung (direction) auf.&quot;;
			break;
	default:BF_Error::extra = &quot;&quot;;
			BF_Error::large_extra = &quot;&quot;;
			break;
	}
}

BF_Error::BF_Error(int error_code)
{
	BF_Error::code = error_code;
	BF_Error::extra_code = 0;

	BF_Error::fill_information();
}

BF_Error::BF_Error(int error_code, int extra_error_code)
{
	BF_Error::code = error_code;
	BF_Error::extra_code = extra_error_code;

	BF_Error::fill_information();
}

string BF_Error::get_desc()
{
	return BF_Error::desc;
}

string BF_Error::get_extra_desc()
{
	return BF_Error::extra;
}

string BF_Error::large_get_desc()
{
	return BF_Error::large_desc;
}

string BF_Error::large_get_extra_desc()
{
	return BF_Error::large_extra;
}

string BF_Error::get_full_text()
{
	string e_code;
	string e_e_code;

	stringstream sstream;

	sstream &lt;&lt; BF_Error::code;
	sstream &gt;&gt; e_code;
	sstream.clear();

	sstream &lt;&lt; BF_Error::extra_code;
	sstream &gt;&gt; e_e_code;
	sstream.clear();

	return &quot;Error: &quot; + e_code + ((BF_Error::extra_code == 0)? &quot;&quot; : &quot; (&quot; + e_e_code + &quot;)&quot;) + &quot;\n\t&quot; + BF_Error::desc +
		((BF_Error::extra_code == 0)? &quot;&quot; : &quot; (&quot; + BF_Error::extra + &quot;)&quot;) + &quot;\n\nDetails:\n\t&quot; + BF_Error::large_desc +
		((BF_Error::extra_code == 0)? &quot;&quot; : &quot;\n\t(&quot; + BF_Error::large_extra + &quot;)&quot;) + &quot;\n&quot;;
}

int BF_Error::get_error_code()
{
	return BF_Error::code;
}

int BF_Error::get_extra_error_code()
{
	return BF_Error::extra_code;
}
</code></pre>
<p>BF_Error.h:</p>
<pre><code class="language-cpp">#pragma once

#include &lt;string&gt;

using namespace std;

class BF_Error
{
private:
	string desc;
	string extra;
	string large_desc;
	string large_extra;
	int code;
	int extra_code;

	void fill_information();

public:
	BF_Error(int error_code);
	BF_Error(int error_code, int extra_error_code);

	string get_desc();
	string get_extra_desc();
	string large_get_desc();
	string large_get_extra_desc();
	string get_full_text();

	int get_error_code();
	int get_extra_error_code();
};
</code></pre>
<p>Meine main.cpp ist unwichtig, weil hier einfach nur getestet wird!</p>
<p>Bitte helft mir!</p>
<p>P.S.: Für Kommentare war leider keine zeit. Aber ich denke, die Funktionen tragen sowieso nichts zur Lösung oder zum Problem bei!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/301931/includes-scheinen-nicht-richtig-zu-funktionieren-unerkärlicher-fehler</link><generator>RSS for Node</generator><lastBuildDate>Tue, 11 Aug 2026 17:18:52 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/301931.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 07 Apr 2012 11:16:19 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Includes scheinen nicht richtig zu funktionieren (unerkärlicher Fehler!) on Sat, 07 Apr 2012 11:25:42 GMT]]></title><description><![CDATA[<p>Hallo.</p>
<p>Ich beginne gerade damit die basis für ein kleines Spiel zu schreiben.</p>
<p>Soweit funktioniert das ganze bis jetzt auch! Aber jetzt habe ich die Klasse World hinzugefügt und jetzt auf einmal funktonieren die includes in der Datei World.h nicht mehr richtig.</p>
<p>Ich habe in der Date Block_Container.h den Datentyp Bit25 (bitset&lt;25&gt;) definiert.</p>
<p>Diesen verwende ich auch so in World.h in diesem Ausschnitt:</p>
<pre><code class="language-cpp">#pragma once

#include &lt;map&gt;
#include &lt;utility&gt;
#include &quot;Block_Container.h&quot;

using namespace std;

typedef map&lt;Bit25, Block_Container&gt;::iterator WorldIter;

class World
{
private:
	map&lt;Bit25, Block_Container&gt; Welt;
        //Ab hier unwichtig!
};
</code></pre>
<p>Außerdem kennt er angeblich die Klasse Block_Container nicht!</p>
<p>Ich vermute, da hat irgendetwas mit den includes nicht geklappt.</p>
<p>Hier meine restlichen Dateien:</p>
<p>World.cpp:</p>
<pre><code class="language-cpp">#include &quot;World.h&quot;

World::World()
{
}

World::~World()
{
}

void World::add(int x, int y, int z)
{
	World::add(x, y, z, 0, 0, 0);
}

void World::add(int x, int y, int z, int ID, int Sub_ID, int direction)
{
	Bit25 pos;

	if((x &lt; 0) || (x &gt; 511))
	{
		throw(BF_Error(1, 1));
	}
	else
	{
		Bit25 tmp = (x &amp; 511);

		pos |= tmp;
	}

	if((y &lt; 0) || (y &gt; 511))
	{
		throw(BF_Error(1, 2));
	}
	else
	{
		Bit25 tmp = (y &amp; 511);

		pos &lt;&lt;= 9;
		pos |= tmp;
	}

	if((z &lt; 0) || (z &gt; 127))
	{
		throw(BF_Error(1, 3));
	}
	else
	{
		Bit25 tmp = (z &amp; 127);

		pos &lt;&lt;= 7;
		pos |= tmp;
	}

	WorldIter it = Welt.find(pos);

	if(it != Welt.end())
	{
		Welt[pos] = Block_Container(x, y, z, ID, Sub_ID, direction, this);
	}
	else
	{
		throw(BF_Error(2));
	}
}
</code></pre>
<p>World.h:</p>
<pre><code class="language-cpp">#pragma once

#include &lt;map&gt;
#include &lt;utility&gt;
#include &quot;Block_Container.h&quot;
#include &quot;BF_Error.h&quot;

using namespace std;

typedef map&lt;Bit25, Block_Container&gt;::iterator WorldIter;

class World
{
private:
	map&lt;Bit25, Block_Container&gt; Welt;

public:
	World();
	~World();

	void add(int x, int y, int z);
	void add(int x, int y, int z, int ID, int Sub_ID, int direction);
};
</code></pre>
<p>Block_Container.cpp:</p>
<pre><code class="language-cpp">#include &quot;Block_Container.h&quot;
#include &lt;iostream&gt;
#include &quot;BF_Error.h&quot;

using namespace std;

Block_Container::Block_Container()
{
	Block_Container::data = 0;
	Block_Container::world = NULL;
}

Block_Container::Block_Container(int x, int y, int z, int ID, int Sub_ID, int direction, World &amp;welt)
{
	if((x &lt; 0) || (x &gt; 511))
	{
		throw(BF_Error(1, 1));
	}
	else
	{
		Bit25 tmp = (x &amp; 511);

		Block_Container::pos |= tmp;
	}

	if((y &lt; 0) || (y &gt; 511))
	{
		throw(BF_Error(1, 2));
	}
	else
	{
		Bit25 tmp = (y &amp; 511);

		Block_Container::pos &lt;&lt;= 9;
		Block_Container::pos |= tmp;
	}

	if((z &lt; 0) || (z &gt; 127))
	{
		throw(BF_Error(1, 3));
	}
	else
	{
		Bit25 tmp = (z &amp; 127);

		Block_Container::pos &lt;&lt;= 7;
		Block_Container::pos |= tmp;
	}

	if((ID &lt; 0) || (ID &gt; 2047))
	{
		throw(BF_Error(1, 4));
	}
	else
	{
		Bit20 tmp = (ID &amp; 2047);

		Block_Container::data |= tmp;
	}

	if((Sub_ID &lt; 0) || (Sub_ID &gt; 127))
	{
		throw(BF_Error(1, 5));
	}
	else
	{
		Bit20 tmp = (Sub_ID &amp; 127);

		Block_Container::data &lt;&lt;= 7;
		Block_Container::data |= tmp;
	}

	if((direction &lt; 0) || (direction &gt; 3))
	{
		throw(BF_Error(1, 6));
	}
	else
	{
		Bit20 tmp = (direction &amp; 3);

		Block_Container::data &lt;&lt;= 2;
		Block_Container::data |= tmp;
	}

	Block_Container::world = &amp;welt;
}

 Block_Container::~Block_Container()
 {
	 //delete Block_Container::block;
 }

int Block_Container::get_direction()
{
	return (int) (Block_Container::data &amp; ((Bit20) 3)).to_ulong();
}

int Block_Container::get_x_Coord()
{
	return (int) ((Block_Container::pos &gt;&gt; 16) &amp; ((Bit25) 511)).to_ulong();
}

int Block_Container::get_y_Coord()
{
	return (int) ((Block_Container::pos &gt;&gt; 7) &amp; ((Bit25) 511)).to_ulong();
}

int Block_Container::get_z_Coord()
{
	return (int) (Block_Container::pos &amp; ((Bit25) 127)).to_ulong();
}

int Block_Container::get_ID()
{
	return (int) ((Block_Container::data &gt;&gt; 9) &amp; ((Bit20) 2047)).to_ulong();
}

int Block_Container::get_Sub_ID()
{
	return (int) ((Block_Container::data &gt;&gt; 2) &amp; ((Bit20) 127)).to_ulong();
}
</code></pre>
<p>Block_Container.h:</p>
<pre><code class="language-cpp">#pragma once

#include &lt;bitset&gt;
#include &quot;World.h&quot;

using namespace std;

typedef bitset&lt;25&gt; Bit25;
typedef bitset&lt;20&gt; Bit20;

class Block_Container
{
private:
	Bit25 pos;																		//Position
	Bit20 data;																		//Container

	//Block *block;	//Noch nicht vorhanden!																//Block-Container

	World *world;

	void update();																	//Update des Blocks

public:

	Block_Container();
	Block_Container(int x, int y, int z, int ID, int Sub_ID, int direction, World &amp;welt);	//Construktoren

	~Block_Container();																//Destruktor

	int get_x_Coord();																//Get-Funktionen
	int get_y_Coord();
	int get_z_Coord();
	int get_ID();
	int get_Sub_ID();
	int get_direction();

	void set_ID(int ID);															//Set-Funktionen
	void set_Sub_ID(int Sub_ID);

	void sleep();											//Setzt die Klasse in den &quot;Stand-by&quot;-Modus
	void wake_up();											//Reaktiviert die Klasse
};
</code></pre>
<p>BF_Error.cpp:</p>
<pre><code class="language-cpp">#include &quot;BF_Error.h&quot;
#include &lt;sstream&gt;

void BF_Error::fill_information()
{
	switch(BF_Error::code)
	{
	case 0: BF_Error::desc = &quot;Unbekannter Fehler&quot;;
			BF_Error::large_desc = &quot;Es stehen keinerlei Informationen zur Verfuegung!&quot;;
			break;
	case 1: BF_Error::desc = &quot;Argumene ausserhalb der Grenze&quot;;
			BF_Error::large_desc = &quot;Sie haben einer Funktion ein Argument uebergeben, dass ausserhalb des zulaessigen Wertbereichs lag!&quot;;
			break;
	case 2: BF_Error::desc = &quot;Position bereits vorhanden!&quot;;
			BF_Error::large_desc = &quot;Die Position, die Sie versucht haben hinzuzufügen existiert bereits!&quot;;
			break;
	default:BF_Error::desc = &quot;Unbekannter Fehler&quot;;
			BF_Error::large_desc = &quot;Es stehen keinerlei Informationen zur Verfuegung!&quot;;
			break;
	}

	switch(BF_Error::extra_code)
	{
	case 0: BF_Error::extra = &quot;&quot;;
			BF_Error::large_extra = &quot;&quot;;
			break;
	case 1: BF_Error::extra = &quot;x-Position&quot;;
			BF_Error::large_extra = &quot;Der Fehler trat im Zusammenhang mit der x-Position auf.&quot;;
			break;
	case 2: BF_Error::extra = &quot;y-Position&quot;;
			BF_Error::large_extra = &quot;Der Fehler trat im Zusammenhang mit der y-Position auf.&quot;;
			break;
	case 3: BF_Error::extra = &quot;z-Position&quot;;
			BF_Error::large_extra = &quot;Der Fehler trat im Zusammenhang mit der z-Position auf.&quot;;
			break;
	case 4: BF_Error::extra = &quot;ID&quot;;
			BF_Error::large_extra = &quot;Der Fehler trat im Zusammenhang mit der ID auf.&quot;;
			break;
	case 5: BF_Error::extra = &quot;Sub_ID&quot;;
			BF_Error::large_extra = &quot;Der Fehler trat im Zusammenhang mit der Sub_ID auf.&quot;;
			break;
	case 6: BF_Error::extra = &quot;direction&quot;;
			BF_Error::large_extra = &quot;Der Fehler trat im Zusammenhang mit der Richtung (direction) auf.&quot;;
			break;
	default:BF_Error::extra = &quot;&quot;;
			BF_Error::large_extra = &quot;&quot;;
			break;
	}
}

BF_Error::BF_Error(int error_code)
{
	BF_Error::code = error_code;
	BF_Error::extra_code = 0;

	BF_Error::fill_information();
}

BF_Error::BF_Error(int error_code, int extra_error_code)
{
	BF_Error::code = error_code;
	BF_Error::extra_code = extra_error_code;

	BF_Error::fill_information();
}

string BF_Error::get_desc()
{
	return BF_Error::desc;
}

string BF_Error::get_extra_desc()
{
	return BF_Error::extra;
}

string BF_Error::large_get_desc()
{
	return BF_Error::large_desc;
}

string BF_Error::large_get_extra_desc()
{
	return BF_Error::large_extra;
}

string BF_Error::get_full_text()
{
	string e_code;
	string e_e_code;

	stringstream sstream;

	sstream &lt;&lt; BF_Error::code;
	sstream &gt;&gt; e_code;
	sstream.clear();

	sstream &lt;&lt; BF_Error::extra_code;
	sstream &gt;&gt; e_e_code;
	sstream.clear();

	return &quot;Error: &quot; + e_code + ((BF_Error::extra_code == 0)? &quot;&quot; : &quot; (&quot; + e_e_code + &quot;)&quot;) + &quot;\n\t&quot; + BF_Error::desc +
		((BF_Error::extra_code == 0)? &quot;&quot; : &quot; (&quot; + BF_Error::extra + &quot;)&quot;) + &quot;\n\nDetails:\n\t&quot; + BF_Error::large_desc +
		((BF_Error::extra_code == 0)? &quot;&quot; : &quot;\n\t(&quot; + BF_Error::large_extra + &quot;)&quot;) + &quot;\n&quot;;
}

int BF_Error::get_error_code()
{
	return BF_Error::code;
}

int BF_Error::get_extra_error_code()
{
	return BF_Error::extra_code;
}
</code></pre>
<p>BF_Error.h:</p>
<pre><code class="language-cpp">#pragma once

#include &lt;string&gt;

using namespace std;

class BF_Error
{
private:
	string desc;
	string extra;
	string large_desc;
	string large_extra;
	int code;
	int extra_code;

	void fill_information();

public:
	BF_Error(int error_code);
	BF_Error(int error_code, int extra_error_code);

	string get_desc();
	string get_extra_desc();
	string large_get_desc();
	string large_get_extra_desc();
	string get_full_text();

	int get_error_code();
	int get_extra_error_code();
};
</code></pre>
<p>Meine main.cpp ist unwichtig, weil hier einfach nur getestet wird!</p>
<p>Bitte helft mir!</p>
<p>P.S.: Für Kommentare war leider keine zeit. Aber ich denke, die Funktionen tragen sowieso nichts zur Lösung oder zum Problem bei!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199566</guid><dc:creator><![CDATA[Die erinnerung]]></dc:creator><pubDate>Sat, 07 Apr 2012 11:25:42 GMT</pubDate></item><item><title><![CDATA[Reply to Includes scheinen nicht richtig zu funktionieren (unerkärlicher Fehler!) on Sat, 07 Apr 2012 11:43:46 GMT]]></title><description><![CDATA[<p><a href="http://www.c-plusplus.net/forum/200753" rel="nofollow">http://www.c-plusplus.net/forum/200753</a></p>
<blockquote>
<p>... Reduziere Codebeispiele auf das Wesentliche. ...</p>
</blockquote>
<p>Zu deinem Problem:<br />
1. Der Präprozessor geht über Block_Container.h<br />
2. Der Header Guard wird über pragma once erstellt<br />
3. Er sieht das include von World.h und inkludiert es<br />
4. Er läuft nun über den eingefügten Inhalt<br />
5. Er sieht ein include von Block_Container.h<br />
6. Beim inkludieren sieht er, dass da ein Header Guard ist, er inkludiert dies somit nicht<br />
7. er geht weiter</p>
<p>Der Kompiler erhält somit ca. folgendes zum Übersetzen:</p>
<pre><code class="language-cpp">/* Inhalt von &lt;bitset&gt;, in Block_Container.h inkludiert */

/* Start von World.h */

/* Inhalt von &lt;map&gt; */
/* Inhalt von &lt;utility&gt; */
/* Inhalt von &quot;Block_Container.h&quot; übersprungen, wegen pragma once */
/* Inhalt &quot;BF_Error.h&quot; */

using namespace std;

typedef map&lt;Bit25, Block_Container&gt;::iterator WorldIter; // &lt;- Bit25 und Block_Container sind noch gar nicht deklariert

class World
{
private:
    map&lt;Bit25, Block_Container&gt; Welt;

public:
    World();
    ~World();

    void add(int x, int y, int z);
    void add(int x, int y, int z, int ID, int Sub_ID, int direction);
};

/* Ende von World.h */

using namespace std;

typedef bitset&lt;25&gt; Bit25;
typedef bitset&lt;20&gt; Bit20;

class Block_Container
{
  // ..
};
</code></pre>
<p>Du darfst keine zyklische Inkludierungen haben. Lagere die Definition von <code>Bit25</code> und co in einen eigenen Header aus. Zudem musst du in Block_Container.h kein World.h inkludieren, da reicht eine Vorwärtsdeklaration für die Klasse <code>World</code> .</p>
<p>Und im übrigen: Niemals ein <code>using namespace</code> in einem Header! Damit müllst du den globalen Namensraum zu und man kann sich dagegen nicht mal wehren.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199577</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 07 Apr 2012 11:43:46 GMT</pubDate></item><item><title><![CDATA[Reply to Includes scheinen nicht richtig zu funktionieren (unerkärlicher Fehler!) on Sat, 07 Apr 2012 15:24:45 GMT]]></title><description><![CDATA[<p>Also meinst du im Prinzip, dass ich alle includes in eine eigene Header-Datei-stecken soll und die in alle anderen Datein includen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199655</guid><dc:creator><![CDATA[Die erinnerung]]></dc:creator><pubDate>Sat, 07 Apr 2012 15:24:45 GMT</pubDate></item><item><title><![CDATA[Reply to Includes scheinen nicht richtig zu funktionieren (unerkärlicher Fehler!) on Sat, 07 Apr 2012 16:34:19 GMT]]></title><description><![CDATA[<p>Ich habe es geschafft, dass das ganze mit den Includes reibungsfrei funktioniert.</p>
<p>Doch wenn ich jetzt in der Klasse <code>World</code>  <code>std::map&lt;Bit25, Block_Container&gt; Welt;</code> , schreibe (im Header), dann erhalte ich folgende Fehlermeldung:</p>
<pre><code>------ Erstellen gestartet: Projekt: Block_Forge, Konfiguration: Debug Win32 ------
  World.cpp
c:\programme\microsoft visual studio 10.0\vc\include\xfunctional(125): error C2784: &quot;bool std::operator &lt;(const std::_Tree&lt;_Traits&gt; &amp;,const std::_Tree&lt;_Traits&gt; &amp;)&quot;: template-Argument für &quot;const std::_Tree&lt;_Traits&gt; &amp;&quot; konnte nicht von &quot;const Bit25&quot; hergeleitet werden.
          c:\programme\microsoft visual studio 10.0\vc\include\xtree(1885): Siehe Deklaration von 'std::operator &lt;'
          c:\programme\microsoft visual studio 10.0\vc\include\xfunctional(124): Bei der Kompilierung der  Klassen-template der bool std::less&lt;_Ty&gt;::operator ()(const _Ty &amp;,const _Ty &amp;) const-Memberfunktion
          with
          [
              _Ty=Bit25
          ]
          c:\programme\microsoft visual studio 10.0\vc\include\map(71): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template &quot;std::less&lt;_Ty&gt;&quot;.
          with
          [
              _Ty=Bit25
          ]
          c:\programme\microsoft visual studio 10.0\vc\include\xtree(451): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template &quot;std::_Tmap_traits&lt;_Kty,_Ty,_Pr,_Alloc,_Mfl&gt;&quot;.
          with
          [
              _Kty=Bit25,
              _Ty=Block_Container,
              _Pr=std::less&lt;Bit25&gt;,
              _Alloc=std::allocator&lt;std::pair&lt;const Bit25,Block_Container&gt;&gt;,
              _Mfl=false
          ]
          c:\programme\microsoft visual studio 10.0\vc\include\xtree(520): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template &quot;std::_Tree_nod&lt;_Traits&gt;&quot;.
          with
          [
              _Traits=std::_Tmap_traits&lt;Bit25,Block_Container,std::less&lt;Bit25&gt;,std::allocator&lt;std::pair&lt;const Bit25,Block_Container&gt;&gt;,false&gt;
          ]
          c:\programme\microsoft visual studio 10.0\vc\include\xtree(659): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template &quot;std::_Tree_val&lt;_Traits&gt;&quot;.
          with
          [
              _Traits=std::_Tmap_traits&lt;Bit25,Block_Container,std::less&lt;Bit25&gt;,std::allocator&lt;std::pair&lt;const Bit25,Block_Container&gt;&gt;,false&gt;
          ]
          c:\programme\microsoft visual studio 10.0\vc\include\map(81): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template &quot;std::_Tree&lt;_Traits&gt;&quot;.
          with
          [
              _Traits=std::_Tmap_traits&lt;Bit25,Block_Container,std::less&lt;Bit25&gt;,std::allocator&lt;std::pair&lt;const Bit25,Block_Container&gt;&gt;,false&gt;
          ]
          e:\eigene dateien\visual studio 2010\projects\map\block_forge\world.h(9): Siehe Verweis auf die Instanziierung der gerade kompilierten Klassen-template &quot;std::map&lt;_Kty,_Ty&gt;&quot;.
          with
          [
              _Kty=Bit25,
              _Ty=Block_Container
          ]
c:\programme\microsoft visual studio 10.0\vc\include\xfunctional(125): error C2784: &quot;bool std::operator &lt;(const std::_Tree&lt;_Traits&gt; &amp;,const std::_Tree&lt;_Traits&gt; &amp;)&quot;: template-Argument für &quot;const std::_Tree&lt;_Traits&gt; &amp;&quot; konnte nicht von &quot;const Bit25&quot; hergeleitet werden.
          c:\programme\microsoft visual studio 10.0\vc\include\xtree(1885): Siehe Deklaration von 'std::operator &lt;'
c:\programme\microsoft visual studio 10.0\vc\include\xfunctional(125): error C2784: &quot;bool std::operator &lt;(const std::unique_ptr&lt;_Ty,_Dx&gt; &amp;,const std::unique_ptr&lt;_Ty2,_Dx2&gt; &amp;)&quot;: template-Argument für &quot;const std::unique_ptr&lt;_Ty,_Dx&gt; &amp;&quot; konnte nicht von &quot;const Bit25&quot; hergeleitet werden.
          c:\programme\microsoft visual studio 10.0\vc\include\memory(2582): Siehe Deklaration von 'std::operator &lt;'
c:\programme\microsoft visual studio 10.0\vc\include\xfunctional(125): error C2784: &quot;bool std::operator &lt;(const std::unique_ptr&lt;_Ty,_Dx&gt; &amp;,const std::unique_ptr&lt;_Ty2,_Dx2&gt; &amp;)&quot;: template-Argument für &quot;const std::unique_ptr&lt;_Ty,_Dx&gt; &amp;&quot; konnte nicht von &quot;const Bit25&quot; hergeleitet werden.
          c:\programme\microsoft visual studio 10.0\vc\include\memory(2582): Siehe Deklaration von 'std::operator &lt;'
c:\programme\microsoft visual studio 10.0\vc\include\xfunctional(125): error C2784: &quot;bool std::operator &lt;(const std::basic_string&lt;_Elem,_Traits,_Alloc&gt; &amp;,const _Elem *)&quot;: template-Argument für &quot;const std::basic_string&lt;_Elem,_Traits,_Alloc&gt; &amp;&quot; konnte nicht von &quot;const Bit25&quot; hergeleitet werden.
          c:\programme\microsoft visual studio 10.0\vc\include\string(243): Siehe Deklaration von 'std::operator &lt;'
c:\programme\microsoft visual studio 10.0\vc\include\xfunctional(125): error C2784: &quot;bool std::operator &lt;(const std::basic_string&lt;_Elem,_Traits,_Alloc&gt; &amp;,const _Elem *)&quot;: template-Argument für &quot;const std::basic_string&lt;_Elem,_Traits,_Alloc&gt; &amp;&quot; konnte nicht von &quot;const Bit25&quot; hergeleitet werden.
          c:\programme\microsoft visual studio 10.0\vc\include\string(243): Siehe Deklaration von 'std::operator &lt;'
c:\programme\microsoft visual studio 10.0\vc\include\xfunctional(125): error C2784: &quot;bool std::operator &lt;(const _Elem *,const std::basic_string&lt;_Elem,_Traits,_Alloc&gt; &amp;)&quot;: template-Argument für &quot;const _Elem *&quot; konnte nicht von &quot;const Bit25&quot; hergeleitet werden.
          c:\programme\microsoft visual studio 10.0\vc\include\string(233): Siehe Deklaration von 'std::operator &lt;'
c:\programme\microsoft visual studio 10.0\vc\include\xfunctional(125): error C2784: &quot;bool std::operator &lt;(const std::basic_string&lt;_Elem,_Traits,_Alloc&gt; &amp;,const std::basic_string&lt;_Elem,_Traits,_Alloc&gt; &amp;)&quot;: template-Argument für &quot;const std::basic_string&lt;_Elem,_Traits,_Alloc&gt; &amp;&quot; konnte nicht von &quot;const Bit25&quot; hergeleitet werden.
          c:\programme\microsoft visual studio 10.0\vc\include\string(223): Siehe Deklaration von 'std::operator &lt;'
c:\programme\microsoft visual studio 10.0\vc\include\xfunctional(125): error C2784: &quot;bool std::operator &lt;(const std::basic_string&lt;_Elem,_Traits,_Alloc&gt; &amp;,const std::basic_string&lt;_Elem,_Traits,_Alloc&gt; &amp;)&quot;: template-Argument für &quot;const std::basic_string&lt;_Elem,_Traits,_Alloc&gt; &amp;&quot; konnte nicht von &quot;const Bit25&quot; hergeleitet werden.
          c:\programme\microsoft visual studio 10.0\vc\include\string(223): Siehe Deklaration von 'std::operator &lt;'
c:\programme\microsoft visual studio 10.0\vc\include\xfunctional(125): error C2784: &quot;bool std::operator &lt;(const std::reverse_iterator&lt;_RanIt&gt; &amp;,const std::reverse_iterator&lt;_RanIt2&gt; &amp;)&quot;: template-Argument für &quot;const std::reverse_iterator&lt;_RanIt&gt; &amp;&quot; konnte nicht von &quot;const Bit25&quot; hergeleitet werden.
          c:\programme\microsoft visual studio 10.0\vc\include\xutility(1356): Siehe Deklaration von 'std::operator &lt;'
c:\programme\microsoft visual studio 10.0\vc\include\xfunctional(125): error C2784: &quot;bool std::operator &lt;(const std::reverse_iterator&lt;_RanIt&gt; &amp;,const std::reverse_iterator&lt;_RanIt2&gt; &amp;)&quot;: template-Argument für &quot;const std::reverse_iterator&lt;_RanIt&gt; &amp;&quot; konnte nicht von &quot;const Bit25&quot; hergeleitet werden.
          c:\programme\microsoft visual studio 10.0\vc\include\xutility(1356): Siehe Deklaration von 'std::operator &lt;'
c:\programme\microsoft visual studio 10.0\vc\include\xfunctional(125): error C2784: &quot;bool std::operator &lt;(const std::_Revranit&lt;_RanIt,_Base&gt; &amp;,const std::_Revranit&lt;_RanIt2,_Base2&gt; &amp;)&quot;: template-Argument für &quot;const std::_Revranit&lt;_RanIt,_Base&gt; &amp;&quot; konnte nicht von &quot;const Bit25&quot; hergeleitet werden.
          c:\programme\microsoft visual studio 10.0\vc\include\xutility(1179): Siehe Deklaration von 'std::operator &lt;'
c:\programme\microsoft visual studio 10.0\vc\include\xfunctional(125): error C2784: &quot;bool std::operator &lt;(const std::_Revranit&lt;_RanIt,_Base&gt; &amp;,const std::_Revranit&lt;_RanIt2,_Base2&gt; &amp;)&quot;: template-Argument für &quot;const std::_Revranit&lt;_RanIt,_Base&gt; &amp;&quot; konnte nicht von &quot;const Bit25&quot; hergeleitet werden.
          c:\programme\microsoft visual studio 10.0\vc\include\xutility(1179): Siehe Deklaration von 'std::operator &lt;'
c:\programme\microsoft visual studio 10.0\vc\include\xfunctional(125): error C2784: &quot;bool std::operator &lt;(const std::pair&lt;_Ty1,_Ty2&gt; &amp;,const std::pair&lt;_Ty1,_Ty2&gt; &amp;)&quot;: template-Argument für &quot;const std::pair&lt;_Ty1,_Ty2&gt; &amp;&quot; konnte nicht von &quot;const Bit25&quot; hergeleitet werden.
          c:\programme\microsoft visual studio 10.0\vc\include\utility(318): Siehe Deklaration von 'std::operator &lt;'
c:\programme\microsoft visual studio 10.0\vc\include\xfunctional(125): error C2784: &quot;bool std::operator &lt;(const std::pair&lt;_Ty1,_Ty2&gt; &amp;,const std::pair&lt;_Ty1,_Ty2&gt; &amp;)&quot;: template-Argument für &quot;const std::pair&lt;_Ty1,_Ty2&gt; &amp;&quot; konnte nicht von &quot;const Bit25&quot; hergeleitet werden.
          c:\programme\microsoft visual studio 10.0\vc\include\utility(318): Siehe Deklaration von 'std::operator &lt;'
c:\programme\microsoft visual studio 10.0\vc\include\xfunctional(125): error C2676: Binärer Operator '&lt;': 'const Bit25' definiert diesen Operator oder eine Konvertierung in einen für den vordefinierten Operator geeigneten Typ nicht
  Code wird generiert...
  Kompilieren...
  main.cpp
  Code wird generiert...
  Überspringen... (keine relevanten Änderungen gefunden)
  Block_Container.cpp
  BF_Error.cpp
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========
</code></pre>
<p>Weiß einer, was da los ist?</p>
<p>Interresant ist auch, dass das <code>typedef std::map&lt;Bit25, Block_Container&gt;::iterator WorldIter;</code> funktioniert!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199682</guid><dc:creator><![CDATA[Die erinnerung]]></dc:creator><pubDate>Sat, 07 Apr 2012 16:34:19 GMT</pubDate></item><item><title><![CDATA[Reply to Includes scheinen nicht richtig zu funktionieren (unerkärlicher Fehler!) on Sat, 07 Apr 2012 18:47:32 GMT]]></title><description><![CDATA[<p>Da hast du wohl jetzt die Definition von 'Bit25' nicht mehr der Klasse zugänglich gemacht (wahrscheinlich das include gelöscht und nur eine Vorwärtsdeklaration eingefügt), also</p>
<pre><code class="language-cpp">#include &lt;bitset&gt;

typedef std::bitset&lt;25&gt; Bit25;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2199738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199738</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Sat, 07 Apr 2012 18:47:32 GMT</pubDate></item><item><title><![CDATA[Reply to Includes scheinen nicht richtig zu funktionieren (unerkärlicher Fehler!) on Sat, 07 Apr 2012 19:34:36 GMT]]></title><description><![CDATA[<p>Das kann es nicht sein. Das habe ich als erstes ausprobiert. Und außerdem funktioniert die Deklaration/Definition<br />
<code>typedef std::map&lt;Bit25, Block_Container&gt;::iterator WorldIter;</code></p>
<p>Da ist auch Bit25 drin!</p>
<p>Nur <code>std::map&lt;Bit25, Block_Container&gt; Welt;</code> in der Klasse als Membervariable funktioniert nicht!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199752</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199752</guid><dc:creator><![CDATA[Die erinnerung]]></dc:creator><pubDate>Sat, 07 Apr 2012 19:34:36 GMT</pubDate></item><item><title><![CDATA[Reply to Includes scheinen nicht richtig zu funktionieren (unerkärlicher Fehler!) on Sat, 07 Apr 2012 19:58:13 GMT]]></title><description><![CDATA[<p>Ein bitset unterstützt nicht den Kleiner-Operator (&lt;), daher kannst du diesen wohl nicht in einer map als Key angeben, s.a. <a href="http://www.cplusplus.com/reference/stl/bitset" rel="nofollow">http://www.cplusplus.com/reference/stl/bitset</a></p>
<p>Evtl. könntest du selber der map als dritten Parameter eine Vergleichsfunktion anbieten (welche auf Basis von to_ulong zwei bitsets vergleicht).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199755</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199755</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Sat, 07 Apr 2012 19:58:13 GMT</pubDate></item><item><title><![CDATA[Reply to Includes scheinen nicht richtig zu funktionieren (unerkärlicher Fehler!) on Sat, 07 Apr 2012 19:59:34 GMT]]></title><description><![CDATA[<p>Wie sähe der Aufruf von map dann aus?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199758</guid><dc:creator><![CDATA[Die erinnerung]]></dc:creator><pubDate>Sat, 07 Apr 2012 19:59:34 GMT</pubDate></item><item><title><![CDATA[Reply to Includes scheinen nicht richtig zu funktionieren (unerkärlicher Fehler!) on Sat, 07 Apr 2012 22:38:51 GMT]]></title><description><![CDATA[<p>Die erinnerung schrieb:</p>
<blockquote>
<p>Also meinst du im Prinzip, dass ich alle includes in eine eigene Header-Datei-stecken soll und die in alle anderen Datein includen?</p>
</blockquote>
<p>Nein? Ich habe nichts annähernd in der Richtung gesagt...</p>
<p>Die erinnerung schrieb:</p>
<blockquote>
<p>Wie sähe der Aufruf von map dann aus?</p>
</blockquote>
<p>Aufruf? Du meinst Deklaration/Definition?<br />
<a href="http://www.cplusplus.com/reference/stl/map/" rel="nofollow"> <code>std::map</code> </a>hat einen dritten Templateparameter, welcher dazu genutzt werden kann, einen Funktortyp zu übergeben. Standardmässig ist das die Klasse<a href="http://www.cplusplus.com/reference/std/functional/less/" rel="nofollow"> <code>less&lt;T&gt;</code> </a>, welche den <code>operator &lt;</code> verwendet. Du könntest daher diese Klasse für dein <code>bitset</code> spezialisieren oder, was ich eher empfehlen würde, einen eigenen Funktor schreiben.</p>
<p>Zum Beispiel:</p>
<pre><code class="language-cpp">struct Bit25Comparator
{
  bool operator ()(Bit25 const&amp; lhs, Bit25 const&amp; rhs) const
  {
    // ... mach hier deinen Vergleich und gib das Ergebnis zurück
  }
};

typedef std::map&lt;Bit25, Block_Container, Bit25Comparator&gt; World;
</code></pre>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199793</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199793</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 07 Apr 2012 22:38:51 GMT</pubDate></item><item><title><![CDATA[Reply to Includes scheinen nicht richtig zu funktionieren (unerkärlicher Fehler!) on Sun, 08 Apr 2012 08:54:15 GMT]]></title><description><![CDATA[<p>Ich habs jetzt anders gelöst:</p>
<p>Mit <code>unordered_map</code> !</p>
<p>Ist im Prinzip das gleiche, wie map, nur, dass hier nichts sortiert wird!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199826</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199826</guid><dc:creator><![CDATA[Die erinnerung]]></dc:creator><pubDate>Sun, 08 Apr 2012 08:54:15 GMT</pubDate></item><item><title><![CDATA[Reply to Includes scheinen nicht richtig zu funktionieren (unerkärlicher Fehler!) on Sun, 08 Apr 2012 10:29:01 GMT]]></title><description><![CDATA[<p>Die erinnerung schrieb:</p>
<blockquote>
<p>Ist im Prinzip das gleiche, wie map, nur, dass hier nichts sortiert wird!</p>
</blockquote>
<p>Aja? Das ist mir neu.</p>
<p>Im übrigen funktioniert dies nur, weil es in C++11 eine Spezialisierung von <code>std::hash</code> für <code>std::bitset</code> gibt. Auch <code>std::unordered_map</code> hat einen dritten Templateparameter wie <code>std::map</code> .</p>
<p>Ich habe langsam das Gefühl, du umschiffst all deine Unkenntnisse und behebst dies mit sehr fragwürdigen Methoden. Vielleicht solltest du eher mal versuchen, dein Wissen aufzupeppen.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199847</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 08 Apr 2012 10:29:01 GMT</pubDate></item><item><title><![CDATA[Reply to Includes scheinen nicht richtig zu funktionieren (unerkärlicher Fehler!) on Sun, 08 Apr 2012 13:27:24 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>Ich habe langsam das Gefühl, du umschiffst all deine Unkenntnisse und behebst dies mit sehr fragwürdigen Methoden.</p>
</blockquote>
<p>Wer umschifft den nicht seine Unkenntnisse?</p>
<p>Ich weiß ja nichtmal, wonach ich suchen soll!</p>
<p>Aber unordered_map ist, denke ich, für mein Problem besser, da ich hier teilweise bis zu 16 Mio. (fast 17) Elemente speichern können muss, und kein Bedarf herrscht, die sortiert zu haben.</p>
<p>Falls meine Meinung hier falsch sein sollte, kläre mich bitte auf!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199907</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199907</guid><dc:creator><![CDATA[Die erinnerung]]></dc:creator><pubDate>Sun, 08 Apr 2012 13:27:24 GMT</pubDate></item><item><title><![CDATA[Reply to Includes scheinen nicht richtig zu funktionieren (unerkärlicher Fehler!) on Sun, 08 Apr 2012 13:57:05 GMT]]></title><description><![CDATA[<p>Die erinnerung schrieb:</p>
<blockquote>
<p>Wer umschifft den nicht seine Unkenntnisse?</p>
</blockquote>
<p>So gut wie alle? Wenn ich etwas nicht weiss, dann informiere ich mich darüber. Sonst wähle ich womöglich eine ungünstige oder gar schlechte Lösung aus. Und vor allem bilde ich mich nie weiter und werde diese Unkenntnis immer haben.</p>
<p>Die erinnerung schrieb:</p>
<blockquote>
<p>Ich weiß ja nichtmal, wonach ich suchen soll!</p>
</blockquote>
<p>Dann frag! Dazu ist das Forum ja da! Wir haben hier schon einige Begriffe genannt, nach welchen du suchen kannst und sonst darfst du ja gerne nachfragen, falls du zu etwas wirklich nichts findest.</p>
<p>Die erinnerung schrieb:</p>
<blockquote>
<p>Aber unordered_map ist, denke ich, für mein Problem besser, da ich hier teilweise bis zu 16 Mio. (fast 17) Elemente speichern können muss, und kein Bedarf herrscht, die sortiert zu haben.</p>
</blockquote>
<p>Das kommt ganz auf den Problemfall und die Implementierung von <code>std::map</code> und <code>std::unordered_map</code> an. Dass <code>std::map</code> die Elemente nach einem Schlüssel sortiert, ist einfach nur ein Nebenprodukt davon, wie die Elemente abgelegt werden. Ich setze oft <code>std::map</code> ein und benötige es nicht, dass die Elemente sortiert sind.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199924</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sun, 08 Apr 2012 13:57:05 GMT</pubDate></item><item><title><![CDATA[Reply to Includes scheinen nicht richtig zu funktionieren (unerkärlicher Fehler!) on Sun, 08 Apr 2012 14:13:55 GMT]]></title><description><![CDATA[<p>Wie ja schon gesagt:</p>
<p>Das sollen bis zu 16 Mio. Elemente rein. Und wenn dann bei jedes neues Element erstmal frisch ein sortiert werden muss, dauert das dann doch recht lange.</p>
<p>Deshalb bin ich in diesem Fall für unordered_map.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199931</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199931</guid><dc:creator><![CDATA[Die erinnerung]]></dc:creator><pubDate>Sun, 08 Apr 2012 14:13:55 GMT</pubDate></item><item><title><![CDATA[Reply to Includes scheinen nicht richtig zu funktionieren (unerkärlicher Fehler!) on Sun, 08 Apr 2012 15:03:02 GMT]]></title><description><![CDATA[<p>16 Mio. Elemente?<br />
Und dann Quelltext, von dem der Autor nicht genau weiss was abgeht?</p>
<p>Mutig, mutig.</p>
<p>Okay, diese 16 Mio.Elemente schreibst du in die Map. Und wozu? Sollen die wieder ausgelesen werden? In einem Rutsch? Nach bestimmten Kriterien?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199938</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199938</guid><dc:creator><![CDATA[Millionen Elemente]]></dc:creator><pubDate>Sun, 08 Apr 2012 15:03:02 GMT</pubDate></item><item><title><![CDATA[Reply to Includes scheinen nicht richtig zu funktionieren (unerkärlicher Fehler!) on Sun, 08 Apr 2012 15:22:27 GMT]]></title><description><![CDATA[<p>Erstens: Wenn ein neues Element in eine std::map eingeügt wird, muss deshalb nicht die gesamte Map neu sortiert werden. Es muss nicht mal der Inhalt der Map hin- und hergeschoben werden. In der Regel steckt hinter std::map ein RB-Baum; von dessen Laufzeitverhalten kannst du also ausgehen.</p>
<p>Zweitens: Hashmaps (eine solche ist unordered_map) können eine Menge Performance bringen, im Umgang mit ihnen ist aber einige Vorsicht geboten. Wenn du nicht weißt, wie eine Hashmap funktioniert, lass die Finger davon. Lass insbesondere dann die Finger davon, wenn die Daten aus einer nicht vertrauenswürdigen Quelle kommen und/oder du nicht überblicken kannst, wie die Verteilung deiner Schlüsselwerte vermutlich aussieht. Wer solche Bedenken beiseite schiebt, <a href="https://www.youtube.com/watch?v=R2Cq3CLI6H8" rel="nofollow">macht sich verwundbar.</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2199946</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2199946</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sun, 08 Apr 2012 15:22:27 GMT</pubDate></item><item><title><![CDATA[Reply to Includes scheinen nicht richtig zu funktionieren (unerkärlicher Fehler!) on Sun, 08 Apr 2012 18:40:28 GMT]]></title><description><![CDATA[<p>Nein, ich brauch das für ein Spiel. Die Map besteht halt aus bis zu 16 Mio. Elementen/Blöcken.</p>
<p>Und da brauche ich eine effiziente Verwaltung. Die Elemente füge ich selbst ein und ich verwalte sie auch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2200014</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2200014</guid><dc:creator><![CDATA[Die erinnerung]]></dc:creator><pubDate>Sun, 08 Apr 2012 18:40:28 GMT</pubDate></item><item><title><![CDATA[Reply to Includes scheinen nicht richtig zu funktionieren (unerkärlicher Fehler!) on Sun, 08 Apr 2012 20:08:23 GMT]]></title><description><![CDATA[<p>Ein Spiel?<br />
Sind das diese Dinger mit 23,546 Frames/Minute <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Wenn nicht, musst du, glaube ich, deine Programmierfähigkeiten noch deutlich updaten <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2200032</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2200032</guid><dc:creator><![CDATA[f.-th.]]></dc:creator><pubDate>Sun, 08 Apr 2012 20:08:23 GMT</pubDate></item><item><title><![CDATA[Reply to Includes scheinen nicht richtig zu funktionieren (unerkärlicher Fehler!) on Mon, 09 Apr 2012 08:44:33 GMT]]></title><description><![CDATA[<p>Wieso?<br />
Also ich verstehe den Sinn deiner Antwort nicht!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2200086</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2200086</guid><dc:creator><![CDATA[Die erinnerung]]></dc:creator><pubDate>Mon, 09 Apr 2012 08:44:33 GMT</pubDate></item></channel></rss>