<?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[[solved] Array dynamischer Größe in struct + Verwendung als const]]></title><description><![CDATA[<p>Hallo,</p>
<p>irgendwie stehe ich gerade auf dem Schlauch. Ich möchte mir gerne ein struct anlegen, welches ein dynamisches Array beinhaltet. Mit diesem struct will ich dann einige Konstanten definieren.</p>
<p>Mein Ansatz (der nicht funktioniert):</p>
<pre><code class="language-cpp">struct t_filter
{
/// \brief Default constructor.
t_filter() : data(NULL), size(0) {}

/// \brief Destructor.
~t_filter() { if( data != NULL ) { delete [] data; data = NULL; } }

double*      data;  ///&lt; Store data here.
unsigned int size;  ///&lt; Length of data array.
};

const t_filter FILTER_1 = { {1.0,2.0,1.0}, 3 }; // Das ist Quatsch!
</code></pre>
<p>Vielleicht könnte mir gerade jemand auf die Sprünge helfen, wie ich das am besten mache?</p>
<p>Viele Grüße,<br />
mbu</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/227051/solved-array-dynamischer-größe-in-struct-verwendung-als-const</link><generator>RSS for Node</generator><lastBuildDate>Wed, 30 Sep 2026 09:09:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/227051.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 10 Nov 2008 09:44:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [solved] Array dynamischer Größe in struct + Verwendung als const on Mon, 10 Nov 2008 12:47:01 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>irgendwie stehe ich gerade auf dem Schlauch. Ich möchte mir gerne ein struct anlegen, welches ein dynamisches Array beinhaltet. Mit diesem struct will ich dann einige Konstanten definieren.</p>
<p>Mein Ansatz (der nicht funktioniert):</p>
<pre><code class="language-cpp">struct t_filter
{
/// \brief Default constructor.
t_filter() : data(NULL), size(0) {}

/// \brief Destructor.
~t_filter() { if( data != NULL ) { delete [] data; data = NULL; } }

double*      data;  ///&lt; Store data here.
unsigned int size;  ///&lt; Length of data array.
};

const t_filter FILTER_1 = { {1.0,2.0,1.0}, 3 }; // Das ist Quatsch!
</code></pre>
<p>Vielleicht könnte mir gerade jemand auf die Sprünge helfen, wie ich das am besten mache?</p>
<p>Viele Grüße,<br />
mbu</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1612653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612653</guid><dc:creator><![CDATA[mbu]]></dc:creator><pubDate>Mon, 10 Nov 2008 12:47:01 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] Array dynamischer Größe in struct + Verwendung als const on Mon, 10 Nov 2008 09:56:22 GMT]]></title><description><![CDATA[<p>mbu schrieb:</p>
<blockquote>
<p>Vielleicht könnte mir gerade jemand auf die Sprünge helfen, wie ich das am besten mache?</p>
</blockquote>
<p>Mit C++ Mitteln:</p>
<pre><code class="language-cpp">#include &lt;vector&gt;

struct t_filter
{
    std::vector&lt;unsigned int&gt; data;
};

int main()
{
    t_filter a;
    a.push_back(1.0);
    a.push_back(2.0);
    a.push_back(1.0);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1612662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612662</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Mon, 10 Nov 2008 09:56:22 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] Array dynamischer Größe in struct + Verwendung als const on Mon, 10 Nov 2008 10:23:03 GMT]]></title><description><![CDATA[<p>Jau, das wär natürlich super. Allerdings möchte ich ja einige konstante Filter definieren. Wie lässt sich das denn mit C++-Mitteln (also std::vector) realisieren? Und wenn es sich nicht realisieren lässt, wie mache ich es dann mit C-Mitteln?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1612663</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612663</guid><dc:creator><![CDATA[mbu]]></dc:creator><pubDate>Mon, 10 Nov 2008 10:23:03 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] Array dynamischer Größe in struct + Verwendung als const on Mon, 10 Nov 2008 10:31:51 GMT]]></title><description><![CDATA[<p>mbu schrieb:</p>
<blockquote>
<p>Allerdings möchte ich ja einige konstante Filter definieren.</p>
</blockquote>
<p>Wie wäre es wenn du erst einmal in etwa Beschreibst was du eigentlich vor hast. dynamisch und konstant sind ja an sich auch schon ein Widerspruch, und wenn du die t_filter-Objekte selbst Konstant machst kann man den Vektor auch nicht ändern.</p>
<p>Beispielsweise:</p>
<pre><code class="language-cpp">void tueWas(t_filter const &amp; filter)
{
    // filter.push_back(2.0); &lt;-- Geht nicht, da konstant
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1612682</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612682</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Mon, 10 Nov 2008 10:31:51 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] Array dynamischer Größe in struct + Verwendung als const on Mon, 10 Nov 2008 10:43:50 GMT]]></title><description><![CDATA[<p>Ich habe bis jetzt einige Filter unterschiedlicher Länge als Konstanten definiert:</p>
<pre><code class="language-cpp">const double COEFF_DAUBECHIES7[7] =
  {
    -0.09127176311424948,
    -0.05754352622849957,
     0.5912717631142470,
     1.115087052456994,
     0.5912717631142470,
    -0.05754352622849957,
    -0.09127176311424948
  };

  const double COEFF_DAUBECHIES9[9] =
  {
     0.02674875741080976,
    -0.01686411844287495,
    -0.07822326652898785,
     0.2668641184428723,
     0.6029490182363579,
     0.2668641184428723,
    -0.07822326652898785,
    -0.01686411844287495,
     0.02674875741080976
  };
</code></pre>
<p>Benutzt habe ich diese bis jetzt über einen enum:</p>
<pre><code class="language-cpp">/// \brief Enumerates all possible filter types.
  enum t_interpolation
  {
    IP_DAUBECHIES7,  ///&lt; Daubechies 7-tap wavelet filter.
    IP_DAUBECHIES9,  ///&lt; Daubechies 9-tap wavelet filter.
    IP_GAUSS,        ///&lt; Gauss filter.
    IP_GAUSS3,       ///&lt; Gauss 3-tap filter.
    IP_LEGALL5       ///&lt; Le-Gall 5-tap wavelet filter.
  };
</code></pre>
<p>indem ich entsprechende Funktionen mit einem Parameter für t_interpolation aufgerufen habe:</p>
<pre><code class="language-cpp">void convolve_horizontal(vnl_matrix&lt;int&gt;&amp; img, const t_interpolation ip_type);
</code></pre>
<p>Nun muss ich aber in der oben deklarierten Funktion abhängig von ip_type den Code dynamisch anpassen. Das möchte ich natürlich insofern vermeiden, dass der Aufruf mit jedem möglichen Filtertypen funktioniert. Nichtsdestotrotz möchte ich weiterhin einige konstant vordefinierte Filter haben.</p>
<p>Zur Erklärung konstant/dynamisch: Die Filter haben alle unterschiedliche Länge (also eigentlich nicht dynamisch, stimmt) aber sollen konstant vordefiniert sein.</p>
<p>Ich möchte also eigentlich die oben zitierte Definition der Konstanten beibehalten, allerdings soll noch die Länge des Arrays verfügbar sein. Dafür benötige ich ja dann ein struct.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1612686</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612686</guid><dc:creator><![CDATA[mbu]]></dc:creator><pubDate>Mon, 10 Nov 2008 10:43:50 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] Array dynamischer Größe in struct + Verwendung als const on Mon, 10 Nov 2008 10:51:10 GMT]]></title><description><![CDATA[<p>Schreib doch noch ein konstantes Array das als Typ Pointer auf double-Arrays hat. Dann kannst du über diesen Array, bei dem du als Index deine Enum-Elemente nehmen kannst, auf das dazugehörige konstante Array zugreifen. Dann brauchst du deiner Funktion auch nur den Enum-Wert übergeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1612695</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612695</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Mon, 10 Nov 2008 10:51:10 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] Array dynamischer Größe in struct + Verwendung als const on Mon, 10 Nov 2008 12:44:32 GMT]]></title><description><![CDATA[<p>Vielen Dank für eure Antworten. Ich bin jetzt dank eurer Hilfe auf folgende Lösung gekommen (etwas gekürzt):</p>
<pre><code class="language-cpp">/// \brief Enumerates all possible filter types.
  enum t_filter_id
  {
    FILTER_ID_DAUBECHIES7,  ///&lt; ID for Daubechies 7-tap wavelet filter.
    FILTER_ID_DAUBECHIES9,  ///&lt; ID for Daubechies 9-tap wavelet filter.
    /* ... */
  };

  /// \brief Defines a filter type.
  struct t_filter
  {
    const t_filter_id   id;   ///&lt; ID of filter.
    const double*       data; ///&lt; Store data here.
    const unsigned int  size; ///&lt; Length of data array.
  };

  const double   COEFF_DAUBECHIES7[7] =
  {
    -0.09127176311424948,
    -0.05754352622849957,
     0.5912717631142470,
     1.115087052456994,
     0.5912717631142470,
    -0.05754352622849957,
    -0.09127176311424948
  };

  const double   COEFF_DAUBECHIES9[9] =
  {
     0.02674875741080976,
    -0.01686411844287495,
    -0.07822326652898785,
     0.2668641184428723,
     0.6029490182363579,
     0.2668641184428723,
    -0.07822326652898785,
    -0.01686411844287495,
     0.02674875741080976
  };

  /* ... */

  const t_filter FILTER_DAUBECHIES7   = { FILTER_ID_DAUBECHIES7, COEFF_DAUBECHIES7, 7 }; ///&lt; Daubechies 7-tap wavelet filter.
  const t_filter FILTER_DAUBECHIES9   = { FILTER_ID_DAUBECHIES9, COEFF_DAUBECHIES9, 9 }; ///&lt; Daubechies 9-tap wavelet filter.
</code></pre>
<p>Die Arraydefinition selbst ist ja tatsächlich ein double-Pointer und passt damit super rein in das Struct. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1612715</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1612715</guid><dc:creator><![CDATA[mbu]]></dc:creator><pubDate>Mon, 10 Nov 2008 12:44:32 GMT</pubDate></item></channel></rss>