<?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[Unklare Compilerfehlermeldung]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich hab folgendes bisschen Code geschrieben:<br />
Header-Datei</p>
<pre><code>void gibbsSampling( int timeSeriesData[StatisticsObject::number30MinIntervals][StatisticsObject::numberOfDays], int trows, int tcols, double probs[(StatisticsObject::number30MinIntervals+1)][StatisticsObject::numberOfDays], int prows, int pcols, int numOfIterations, int numOfIterationsToSkip  );
</code></pre>
<blockquote>
<p>StatisticsObject::number30MinIntervals<br />
StatisticsObject::numberOfDays</p>
</blockquote>
<p>sind statische Konstanten aus einer anderen Headerdatei.</p>
<p>CPP Datei</p>
<pre><code>void GibbsSampler::gibbsSampling( int timeSeriesData[StatisticsObject::number30MinIntervals][StatisticsObject::numberOfDays], int trows, int tcols, double probs[(StatisticsObject::number30MinIntervals+1)][StatisticsObject::numberOfDays], int prows, int pcols, int numOfIterations, int numOfIterationsToSkip  )
</code></pre>
<p>Die Methode rufe ich wie folgt auf:</p>
<pre><code>RandomNumberGenerator rng;

	GibbsSampler gs( &amp;rng );
	int ts[(StatisticsObject::number30MinIntervals)][StatisticsObject::numberOfDays];
	int p[(StatisticsObject::number30MinIntervals+1)][StatisticsObject::numberOfDays];
	gs.gibbsSampling( ts, 48, 7, p, 49, 100, 1000, 900 );
</code></pre>
<p>Erhalte aber folgenden Fehler:</p>
<blockquote>
<p>g++ -g -Wall -c DDoS.cpp -o DDoSS.o<br />
DDoS.cpp: In function ‘int main()’:<br />
DDoS.cpp:38: error: no matching function for call to ‘GibbsSampler::gibbsSampling(int [2][2], int, int, int [3][2], int, int, int, int)’<br />
GibbsSampler.h:12: note: candidates are: void GibbsSampler::gibbsSampling(int (<em>)[2], int, int, double (</em>)[2], int, int, int, int)<br />
make: *** [DDoSS.o] Error 1</p>
</blockquote>
<p>Mir erschließt sich aus der Fehlermeldung leider keine Lösung.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/266865/unklare-compilerfehlermeldung</link><generator>RSS for Node</generator><lastBuildDate>Wed, 02 Sep 2026 19:00:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/266865.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 15 May 2010 15:18:58 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Unklare Compilerfehlermeldung on Sat, 15 May 2010 15:18:58 GMT]]></title><description><![CDATA[<p>Hi!</p>
<p>Ich hab folgendes bisschen Code geschrieben:<br />
Header-Datei</p>
<pre><code>void gibbsSampling( int timeSeriesData[StatisticsObject::number30MinIntervals][StatisticsObject::numberOfDays], int trows, int tcols, double probs[(StatisticsObject::number30MinIntervals+1)][StatisticsObject::numberOfDays], int prows, int pcols, int numOfIterations, int numOfIterationsToSkip  );
</code></pre>
<blockquote>
<p>StatisticsObject::number30MinIntervals<br />
StatisticsObject::numberOfDays</p>
</blockquote>
<p>sind statische Konstanten aus einer anderen Headerdatei.</p>
<p>CPP Datei</p>
<pre><code>void GibbsSampler::gibbsSampling( int timeSeriesData[StatisticsObject::number30MinIntervals][StatisticsObject::numberOfDays], int trows, int tcols, double probs[(StatisticsObject::number30MinIntervals+1)][StatisticsObject::numberOfDays], int prows, int pcols, int numOfIterations, int numOfIterationsToSkip  )
</code></pre>
<p>Die Methode rufe ich wie folgt auf:</p>
<pre><code>RandomNumberGenerator rng;

	GibbsSampler gs( &amp;rng );
	int ts[(StatisticsObject::number30MinIntervals)][StatisticsObject::numberOfDays];
	int p[(StatisticsObject::number30MinIntervals+1)][StatisticsObject::numberOfDays];
	gs.gibbsSampling( ts, 48, 7, p, 49, 100, 1000, 900 );
</code></pre>
<p>Erhalte aber folgenden Fehler:</p>
<blockquote>
<p>g++ -g -Wall -c DDoS.cpp -o DDoSS.o<br />
DDoS.cpp: In function ‘int main()’:<br />
DDoS.cpp:38: error: no matching function for call to ‘GibbsSampler::gibbsSampling(int [2][2], int, int, int [3][2], int, int, int, int)’<br />
GibbsSampler.h:12: note: candidates are: void GibbsSampler::gibbsSampling(int (<em>)[2], int, int, double (</em>)[2], int, int, int, int)<br />
make: *** [DDoSS.o] Error 1</p>
</blockquote>
<p>Mir erschließt sich aus der Fehlermeldung leider keine Lösung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897578</guid><dc:creator><![CDATA[HändyÄndy]]></dc:creator><pubDate>Sat, 15 May 2010 15:18:58 GMT</pubDate></item><item><title><![CDATA[Reply to Unklare Compilerfehlermeldung on Sat, 15 May 2010 15:23:28 GMT]]></title><description><![CDATA[<p>Du versuchst, ein zweidimensionales int-Array in ein zweidimensionales double-Array zu quetschen. Mit</p>
<pre><code class="language-cpp">double /* &lt;-- */ p[(StatisticsObject::number30MinIntervals+1)][StatisticsObject::numberOfDays];
</code></pre>
<p>müsste es gehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897581</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Sat, 15 May 2010 15:23:28 GMT</pubDate></item><item><title><![CDATA[Reply to Unklare Compilerfehlermeldung on Sat, 15 May 2010 16:09:28 GMT]]></title><description><![CDATA[<p>Ach Gott! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897604</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897604</guid><dc:creator><![CDATA[HändyÄndy]]></dc:creator><pubDate>Sat, 15 May 2010 16:09:28 GMT</pubDate></item><item><title><![CDATA[Reply to Unklare Compilerfehlermeldung on Sat, 15 May 2010 18:09:45 GMT]]></title><description><![CDATA[<p>Ich hab noch eine weitergehende Frage zur Übergabe von Funktionswerten.</p>
<p>Ich habe meine Methode jetzt wie folgt deklariert:<br />
Header Datei</p>
<pre><code>void gibbsSampling( int** timeSeriesData, int trows, int tcols, double** probs, int prows, int pcols, int numOfIterations, int numOfIterationsToSkip );
</code></pre>
<p>und ich rufe sie so auf:</p>
<pre><code>RandomNumberGenerator rng;
	GibbsSampler gs( &amp;rng );
	int ts[(StatisticsObject::number30MinIntervals)][StatisticsObject::numberOfDays];
	double p[(StatisticsObject::number30MinIntervals+1)][StatisticsObject::numberOfDays];
	gs.gibbsSampling( ts, 48, 7, p, 49, 100, 1000, 900 );
</code></pre>
<p>Dann sagt mir der Compiler folgendes:</p>
<blockquote>
<p>g++ -g -Wall -c DDoS.cpp -o DDoSS.o<br />
DDoS.cpp: In function ‘int main()’:<br />
DDoS.cpp:38: error: no matching function for call to ‘GibbsSampler::gibbsSampling(int [2][2], int, int, double [3][2], int, int, int, int)’<br />
GibbsSampler.h:14: note: candidates are: void GibbsSampler::gibbsSampling(int**, int, int, double**, int, int, int, int)<br />
make: *** [DDoSS.o] Error 1</p>
</blockquote>
<p>Mir ist das nicht ganz klar, weil meinem Wissen nach ein 2-dimensionales Array doch auch als double** oder int** deklariert werden kann. Insofern müsste es doch passen wenn ich die Methode so aufrufe. Warum geht das trotzdem nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897634</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897634</guid><dc:creator><![CDATA[HändyÄndy]]></dc:creator><pubDate>Sat, 15 May 2010 18:09:45 GMT</pubDate></item><item><title><![CDATA[Reply to Unklare Compilerfehlermeldung on Sat, 15 May 2010 18:16:09 GMT]]></title><description><![CDATA[<p>Ein statisch Array mit der Länge 2 ist nicht Typegleich mit der Länge 2+1.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897635</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897635</guid><dc:creator><![CDATA[Zeus]]></dc:creator><pubDate>Sat, 15 May 2010 18:16:09 GMT</pubDate></item><item><title><![CDATA[Reply to Unklare Compilerfehlermeldung on Sat, 15 May 2010 18:30:22 GMT]]></title><description><![CDATA[<p>Versteh ich nicht. Die Antwort ist zu kurz.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897638</guid><dc:creator><![CDATA[HändyÄndy]]></dc:creator><pubDate>Sat, 15 May 2010 18:30:22 GMT</pubDate></item><item><title><![CDATA[Reply to Unklare Compilerfehlermeldung on Sat, 15 May 2010 18:41:14 GMT]]></title><description><![CDATA[<p>Kompilier mal:</p>
<pre><code class="language-cpp">void doit(int x[3][3])
{
}

int main() {
	int a[3][2];
	doit(a);
	return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1897642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897642</guid><dc:creator><![CDATA[Zeus]]></dc:creator><pubDate>Sat, 15 May 2010 18:41:14 GMT</pubDate></item><item><title><![CDATA[Reply to Unklare Compilerfehlermeldung on Sat, 15 May 2010 18:46:39 GMT]]></title><description><![CDATA[<p>Ich sehe jetzt nicht wieso das meine Frage beantworten soll.</p>
<p>Meiner Ansicht nach ist es völlig egal was für ein Array ich übergebe. Meine Methodendklaration sieht ja auch nicht so aus wie in deinem Beispiel. Mein Problem wäre das hier:</p>
<pre><code>void doit(int** x)
{
}

int main() {
    int a[3][2];
    doit(a);
    return 0;
}
</code></pre>
<p>macht meiner Meinung nach das gleiche wie</p>
<pre><code>void doit(int** x)
{
}

int main() {
    int a[67][100];
    doit(a);
    return 0;
}
</code></pre>
<p>a ist doch ein 2-Dimensionaler Pointer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897644</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897644</guid><dc:creator><![CDATA[HändyÄndy]]></dc:creator><pubDate>Sat, 15 May 2010 18:46:39 GMT</pubDate></item><item><title><![CDATA[Reply to Unklare Compilerfehlermeldung on Sat, 15 May 2010 18:52:25 GMT]]></title><description><![CDATA[<p>HändyÄndy schrieb:</p>
<blockquote>
<pre><code class="language-cpp">void doit(int** x)
{
}

int main() {
    int a[67][100];
    doit(a);
    return 0;
}
</code></pre>
</blockquote>
<p>Ein Zeiger ist etwas anderes als ein Array. Es ist zwar richtig, dass ein Array beim Aufruf einer Funktion sich als ein Zeiger auf sein erstes Element ausgibt, hier ist dies jedoch ein Zeiger auf auf einen int[100]. Und eben nicht ein Zeiger auf einen Zeiger. Und deshalb passt dies nicht zusammen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897647</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sat, 15 May 2010 18:52:25 GMT</pubDate></item><item><title><![CDATA[Reply to Unklare Compilerfehlermeldung on Sat, 15 May 2010 18:58:44 GMT]]></title><description><![CDATA[<p>Achso. Okay, ich hab meinen Aufruf jetzt einfach modifiziert und rufe sie jetzt so auf:</p>
<pre><code>gs.gibbsSampling( (int**) ts, 48, 7, (double**) p, 49, 100, 1000, 900 );
</code></pre>
<p>Kappt auch, finde ich allerdings jetzt nich besonders logisch, dass man das casten muss. Naja...</p>
<p>Vielen Dank für die hilfreichen Antworten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897649</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897649</guid><dc:creator><![CDATA[HändyÄndy]]></dc:creator><pubDate>Sat, 15 May 2010 18:58:44 GMT</pubDate></item><item><title><![CDATA[Reply to Unklare Compilerfehlermeldung on Sat, 15 May 2010 19:04:32 GMT]]></title><description><![CDATA[<p>Ich habe mir mal erlaubt die code-tags durch cpp-tags zu ersetzen und den code neu zu formatieren...</p>
<p>HändyÄndy schrieb:</p>
<blockquote>
<pre><code class="language-cpp">void gibbsSampling(
    int** timeSeriesData, int trows, int tcols,
    double** probs, int prows, int pcols,
    int numOfIterations,
    int numOfIterationsToSkip );
</code></pre>
<p>und ich rufe sie so auf:</p>
<pre><code class="language-cpp">RandomNumberGenerator rng;
GibbsSampler gs( &amp;rng );
int ts[...][...];
double p[...][...];
gs.gibbsSampling( ts, 48, 7, p, 49, 100, 1000, 900 );
</code></pre>
</blockquote>
<p>HändyÄndy schrieb:</p>
<blockquote>
<p>Mir ist das nicht ganz klar, weil meinem Wissen nach ein 2-dimensionales Array doch auch als double** oder int** deklariert werden kann. Insofern müsste es doch passen wenn ich die Methode so aufrufe. Warum geht das trotzdem nicht?</p>
</blockquote>
<p>Weil Du Dich geirrt hast. Ein Zeiger auf ein Zeiger auf int (p) ist nicht dasselbe wie ein Zeiger auf ein Array aus ints (q), siehe unten.</p>
<pre><code>int a[2] = {1,2};             p     x     a            y
int b[2] = {3,4};            [.]--&gt;[.]--&gt;[1]    q    +---+
int *x[2] = {&amp;a[0],&amp;b[0]};         [.]   [2]   [.]--&gt;|[1]|
int y[2][2] = {                       \              |[2]|
   {1,2},                              \  b          +---+
   {3,4},                               &gt;[3]         |[3]|
};                                       [4]         |[4]|
int **p = x;                                         +---+
int (*q)[2] = y;
</code></pre>
<p>Hier symbolisiert &quot;.&quot; eine Speicheradresse. Die Elemente des y-Arrays sind wiederum Arrays.</p>
<p>kk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897652</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sat, 15 May 2010 19:04:32 GMT</pubDate></item><item><title><![CDATA[Reply to Unklare Compilerfehlermeldung on Sat, 15 May 2010 19:07:33 GMT]]></title><description><![CDATA[<p>HändyÄndy schrieb:</p>
<blockquote>
<pre><code class="language-cpp">gs.gibbsSampling( (int**) ts, 48, 7, (double**) p, 49, 100, 1000, 900 );
</code></pre>
<p>Kappt auch, finde ich allerdings jetzt nich besonders logisch, dass man das casten muss. Naja...</p>
</blockquote>
<p>Wenn Du mit &quot;Klappt auch&quot; meinst, dass es kompiliert, dann ja. Wenn Du damit meinst &quot;Es tut das, was ich will&quot;, nein, tut es nicht. Das ist ein ReinterpretCast. Hier sagst Du dem Compiler: &quot;Hey, ich weiß es besser, also halt die Schnauze&quot;. Aber Du weißt es nicht besser. Also lass die Finger davon. Es funzt eh nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897653</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sat, 15 May 2010 19:07:33 GMT</pubDate></item><item><title><![CDATA[Reply to Unklare Compilerfehlermeldung on Sat, 15 May 2010 19:14:41 GMT]]></title><description><![CDATA[<p>Vielleicht Boost::Matrix verwenden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897654</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897654</guid><dc:creator><![CDATA[Zeus]]></dc:creator><pubDate>Sat, 15 May 2010 19:14:41 GMT</pubDate></item><item><title><![CDATA[Reply to Unklare Compilerfehlermeldung on Sat, 15 May 2010 19:17:21 GMT]]></title><description><![CDATA[<p>Zeus schrieb:</p>
<blockquote>
<p>Vielleicht Boost::Matrix verwenden?</p>
</blockquote>
<p>Das würde ein wenig verschleiern, aber es rettet</p>
<pre><code class="language-cpp">gs.gibbsSampling( ts, 48, 7, p, 49, 100, 1000, 900 );
</code></pre>
<p>auch nicht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897655</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897655</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 15 May 2010 19:17:21 GMT</pubDate></item><item><title><![CDATA[Reply to Unklare Compilerfehlermeldung on Sat, 15 May 2010 19:24:52 GMT]]></title><description><![CDATA[<p>HändyÄndy schrieb:</p>
<blockquote>
<pre><code>void doit(int** x);

int main() {
    int a[67][100];
    doit(a);
    return 0;
}
</code></pre>
<p>a ist doch ein 2-Dimensionaler Pointer.</p>
</blockquote>
<p>a ist ein Array aus Arrays und kein Zeiger. Und so etwas wie &quot;zweidimensionale&quot; Zeiger gibt es nicht. Es gibt aber Zeiger auf Zeiger. Du müsstest korrekterweise doit so deklarieren:</p>
<pre><code class="language-cpp">void doit(int x[67] [100]);
void doit(int x[123][100]);
void doit(int x[]   [100]);
void doit(int (*x)  [100]);
</code></pre>
<p>(ist alles äquivalent)</p>
<p>Die Geschichte der Menstru ... ähm... Zeiger und Arrays ist eine Geschichte voller Missverständnisse. Arrays sind keine Zeiger. Bei Parametertypen findet aber eine Transformation statt; denn Arrays kann man nicht &quot;per value&quot; übergeben. Wird ein Funktionsparameter mit dem Typ T[] oder T[N] deklariert, wird daraus automatisch ein T*. Das ist aber nur auf der obersten Ebene so. Das heißt dass ein int[2][2] zu einem int(*)[2] wird und auf der Aufruferseite ein &quot;array-to-pointer&quot; decay stattfindet.</p>
<p>kk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897656</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sat, 15 May 2010 19:24:52 GMT</pubDate></item><item><title><![CDATA[Reply to Unklare Compilerfehlermeldung on Sat, 15 May 2010 19:28:27 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Zeus schrieb:</p>
<blockquote>
<p>Vielleicht Boost::Matrix verwenden?</p>
</blockquote>
<p>Das würde ein wenig verschleiern, aber es rettet</p>
<pre><code class="language-cpp">gs.gibbsSampling( ts, 48, 7, p, 49, 100, 1000, 900 );
</code></pre>
<p>auch nicht. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
</blockquote>
<pre><code class="language-cpp">void gibbsSampling( int timeSeriesData[StatisticsObject::number30MinIntervals][StatisticsObject::numberOfDays], int trows, int tcols, double probs[(StatisticsObject::number30MinIntervals+1)][StatisticsObject::numberOfDays], int prows, int pcols, int numOfIterations, int numOfIterationsToSkip  );
</code></pre>
<p>Auf Boost Matrix umsteigen, bedeutet, da fallen 4 Parameter weg.</p>
<p>trows, tcols, prows, pcols <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897658</guid><dc:creator><![CDATA[Zeus]]></dc:creator><pubDate>Sat, 15 May 2010 19:28:27 GMT</pubDate></item><item><title><![CDATA[Reply to Unklare Compilerfehlermeldung on Sat, 15 May 2010 19:32:40 GMT]]></title><description><![CDATA[<p>Zeus schrieb:</p>
<blockquote>
<p>Auf Boost Matrix umsteigen, bedeutet, da fallen 4 Parameter weg.<br />
trows, tcols, prows, pcols <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>
</blockquote>
<p>Ups, schnell umsteigen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897660</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 15 May 2010 19:32:40 GMT</pubDate></item><item><title><![CDATA[Reply to Unklare Compilerfehlermeldung on Sat, 15 May 2010 19:56:40 GMT]]></title><description><![CDATA[<p>Meinst Du multi_array? Ja, könnte man machen.</p>
<p>Ich habe mir so etwas ähnliches wie Iteratoren für beliebig-dimensionale Daten gebastelt (aber immer noch ein &quot;rechteckiges Gitter&quot;) und benutze das gerne. Wenn's einen interessiert, versuche ich mal das Konzept durch ein Anwendungsbeispiel zu konkretisieren:</p>
<pre><code class="language-cpp">template&lt;typename Navigator&gt;
typename enable_if&lt;(Navigator::dimensions == 2),
void&gt;::type show(Navigator nav)
{
  const int width  = nav.size(0); // 1st dimension
  const int height = nav.size(1); // 2nd dimension
  const auto right = nav.make_offset(make_point(1,0));
  for (int y=0; y&lt;height; ++y) {
    auto locator = nav.get_locator(make_point(0,y));
    for (int x=0; x&lt;width; ++x) {
      std::cout &lt;&lt; ' ' &lt;&lt; *locator;
      locator += right;
    }
  }
}
</code></pre>
<p>Ein Navigator ist vergleichbar mit pair&lt;Iterator,Iterator&gt;. Ein Locator wäre der Iterator. Aber Statt ++ und -- unterstützt er += und -= in Verbindung mit einem &quot;Offset&quot;, welcher keine Ganzzahl sein muss. Da ich aber vorwiegend ein lineares Memorylayout benutze, ist ein Locator i.d.R. ein Zeiger und Offsets vom Typ ptrdiff_t.</p>
<p>kk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1897667</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1897667</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sat, 15 May 2010 19:56:40 GMT</pubDate></item></channel></rss>