<?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[std::vector definieren]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgendes Problem:</p>
<p>In der MainForm definiere ich folgende Struktur:</p>
<pre><code class="language-cpp">...
...
public:
  struct ndata
  {
    String profil;
    double tonnage;
    int anzahl;
  } cAvg;
...
...
</code></pre>
<p>(in der Main.h)</p>
<p>In mehreren MDI-Formularen möchte ich diese Struktur in std::vector nutzen.</p>
<pre><code class="language-cpp">...
...
Taverage *average;

  std::vector&lt;MainForm-&gt;cAvg&gt; Durchschnitt;   // &lt;-- diese Definition

  std::vector&lt;double&gt; chart_zoom;

//---------------------------------------------------------------------------
__fastcall Taverage::Taverage(TComponent* Owner)
  : TForm(Owner)
{
...
...
</code></pre>
<p>Beim Compilieren des MDI-Forms kommt der Compilerfehler<br />
E2401 Ungültige Template-Argumentliste</p>
<p>Wenn ich die Struktur in der Form definiere, dann funktioniert das.</p>
<p>Wo liegt mein Fehler???</p>
<p>Gruß Udo</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/190882/std-vector-definieren</link><generator>RSS for Node</generator><lastBuildDate>Mon, 17 Aug 2026 14:43:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/190882.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 28 Aug 2007 06:24:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::vector definieren on Tue, 28 Aug 2007 06:24:05 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgendes Problem:</p>
<p>In der MainForm definiere ich folgende Struktur:</p>
<pre><code class="language-cpp">...
...
public:
  struct ndata
  {
    String profil;
    double tonnage;
    int anzahl;
  } cAvg;
...
...
</code></pre>
<p>(in der Main.h)</p>
<p>In mehreren MDI-Formularen möchte ich diese Struktur in std::vector nutzen.</p>
<pre><code class="language-cpp">...
...
Taverage *average;

  std::vector&lt;MainForm-&gt;cAvg&gt; Durchschnitt;   // &lt;-- diese Definition

  std::vector&lt;double&gt; chart_zoom;

//---------------------------------------------------------------------------
__fastcall Taverage::Taverage(TComponent* Owner)
  : TForm(Owner)
{
...
...
</code></pre>
<p>Beim Compilieren des MDI-Forms kommt der Compilerfehler<br />
E2401 Ungültige Template-Argumentliste</p>
<p>Wenn ich die Struktur in der Form definiere, dann funktioniert das.</p>
<p>Wo liegt mein Fehler???</p>
<p>Gruß Udo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353459</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353459</guid><dc:creator><![CDATA[Udo_11]]></dc:creator><pubDate>Tue, 28 Aug 2007 06:24:05 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector definieren on Tue, 28 Aug 2007 07:04:14 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Natürlich muß die Struktur bei der Deklaration des vectors bekannt sein.<br />
Lagere die Struktur in eine extra Header-Datei aus und include diese von allen Stellen wo du sie brauchst.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353486</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353486</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 28 Aug 2007 07:04:14 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector definieren on Tue, 28 Aug 2007 07:27:19 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>Das hier</p>
<pre><code class="language-cpp">std::vector&lt;MainForm-&gt;cAvg&gt;
</code></pre>
<p>kann eigentlich nicht funktionieren. Als Templateargument gibt man Typen an und keine Instanzen.<br />
Das sollte wohl eher so aussehen.</p>
<pre><code class="language-cpp">std::vector&lt;TMainForm::ndata&gt;
</code></pre>
<p>Ein Include ist hier übrigens nicht unbedingt nötig. Eine Forwarddeklaration reicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353506</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353506</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 28 Aug 2007 07:27:19 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector definieren on Tue, 28 Aug 2007 08:08:29 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/7971">@Akari</a>:<br />
Danke, das wars.</p>
<p>Ich bin fälschlicherweise davon ausgegangen, das die Variable und damit auch die Struktur bekannt ist, wenn die Codevervollständigung funktioniert.</p>
<p>Gruß Udo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353541</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353541</guid><dc:creator><![CDATA[Udo_11]]></dc:creator><pubDate>Tue, 28 Aug 2007 08:08:29 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector definieren on Tue, 28 Aug 2007 08:53:08 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1387">@Braunstein</a>:<br />
Zuerst hatte ich natürlich den Typ in der Deklaration stehen, aber das hat natürlich auch nicht funktioniert.</p>
<p>Wo müßte denn die Forward-Deklaration stehen, in der MainForm oder ?</p>
<p>Gruß Udo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353568</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353568</guid><dc:creator><![CDATA[Udo_11]]></dc:creator><pubDate>Tue, 28 Aug 2007 08:53:08 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector definieren on Tue, 28 Aug 2007 08:57:21 GMT]]></title><description><![CDATA[<p>Die müsste vor der Deklaration in der entsprechenden Headerdatei (MDI-Formular) stehen. Die Mainform kennt den Typ doch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353572</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 28 Aug 2007 08:57:21 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector definieren on Tue, 28 Aug 2007 08:58:43 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Nein eine Forward Declaration bringt hier nichts, da du ja nicht mit Pointern als Elementtyp arbeitest. Der Compiler muß den ganzen Elementtyp kennen.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353576</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 28 Aug 2007 08:58:43 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector definieren on Tue, 28 Aug 2007 09:04:42 GMT]]></title><description><![CDATA[<p>Das ist in diesem Fall egal da es ja nur eine Deklaration ist. Auch bei Templateargumenten und Funktionsparametern genügen Forwarddeklarationen vor der Deklaration im Header. Spätestens bei der ersten Verwendung (z.Bsp. Konstruktor) muß der konkrete Typ aber bekannt sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353580</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 28 Aug 2007 09:04:42 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector definieren on Tue, 28 Aug 2007 09:31:19 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Nein eine Forward Declaration reicht nicht aus. Einfacher Test :<br />
Neues Projekt, Zusätzliche Unit mit class Test...<br />
Dann in der Headerdatei der eigentlichen Hauptunit :</p>
<pre><code class="language-cpp">#include &lt;vector&gt;
...
class Test;
std::vector&lt;Test&gt; test;
...
</code></pre>
<p>Fehlermeldung vom Compiler :</p>
<blockquote>
<p>memory.stl : Undefinierte Struktur 'Test'</p>
</blockquote>
<p>Dabei spielt es auch keine Rolle ob als global oder Member.</p>
<p>Erst das includen vom Header von Unit2 im <strong>Header</strong> von Form1 löst das Problem und macht die Forward Declaration überflüssig.<br />
Das liegt daran das vector eben Instanzen des Elementtypes kopieren und deren Größe kennen muß, und zwar bereits beim Deklarieren, nicht erst beim Benutzen.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353601</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 28 Aug 2007 09:31:19 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector definieren on Tue, 28 Aug 2007 09:48:00 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1387">@Braunstein</a>:<br />
Ich habe das ganze jetzt mit forward-Deklarationen <a href="http://gemacht.Es" rel="nofollow">gemacht.Es</a> wird fehlerfrei compiliert, aber der Debugger sagt mir, das die in der Struktur definierten Felder keine Elemente des vector sind.</p>
<p>Gruß Udo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353622</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353622</guid><dc:creator><![CDATA[Udo_11]]></dc:creator><pubDate>Tue, 28 Aug 2007 09:48:00 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector definieren on Tue, 28 Aug 2007 11:17:38 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/7971">@akari</a><br />
Ich habe den gleichen Test gemacht und keine Probleme damit gehabt sofern in der cpp-Datei die Deklaration bekannt war (BCB5 und BCB2007).<br />
[edit]</p>
<blockquote>
<p>Das liegt daran das vector eben Instanzen des Elementtypes kopieren und deren Größe kennen muß</p>
</blockquote>
<p>Wenn der vector ein member der Klasse ist wird erst beim Aufruf des Konstruktors eine Instanz erzeugt und somit muß auch erst da der Objekttyp vollständig bekannt sein.<br />
[edit]</p>
<p>@Udo_11<br />
Keine Ahnung woran das jetzt liegt. Es könnte sein, dass der Debugger die Deklaration nicht kennt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353697</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353697</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 28 Aug 2007 11:17:38 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector definieren on Tue, 28 Aug 2007 11:19:26 GMT]]></title><description><![CDATA[<p>Kommando zurück!!!<br />
Mein letzter Post war falsch. Auch mit Forward-Deklarationen gehts.<br />
in der MainForm.h:</p>
<pre><code class="language-cpp">...
...
  struct ndata
  {
    String profil;
    double tonnage;
    int anzahl;
  } ;

//----------------------------------------------------------------------------
class TMainForm : public TForm
{
...
...
</code></pre>
<p>In den MDI-Formularen(.cpp):</p>
<pre><code class="language-cpp">...
...
  struct ndata;

  std::vector&lt;ndata&gt; ch_data;

//---------------------------------------------------------------------------
__fastcall Twk_leben::Twk_leben(TComponent* Owner)
  : TForm(Owner)
{
...
...
</code></pre>
<p>Gruß Udo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353705</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353705</guid><dc:creator><![CDATA[Udo_11]]></dc:creator><pubDate>Tue, 28 Aug 2007 11:19:26 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector definieren on Tue, 28 Aug 2007 11:56:20 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Braunstein schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/7971">@akari</a><br />
Ich habe den gleichen Test gemacht und keine Probleme damit gehabt sofern in der cpp-Datei die Deklaration bekannt war (BCB5 und BCB2007).</p>
</blockquote>
<p>Ah okay. Wenn ich die Deklaration als Member des Forms (und nicht global) verlagere und in der cpp den Include einfüge, dann kompiliert es wirklich.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353751</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 28 Aug 2007 11:56:20 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector definieren on Tue, 28 Aug 2007 13:01:19 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/7971">@Akari</a> und Braunstein</p>
<p>Danke für Eure Hilfe!</p>
<p>Habt Ihr Euch meine letzten Codeausschnitte mal angeschaut?<br />
Kann man das so stehen lassen?</p>
<p>Gruß Udo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353818</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353818</guid><dc:creator><![CDATA[Udo_11]]></dc:creator><pubDate>Tue, 28 Aug 2007 13:01:19 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector definieren on Tue, 28 Aug 2007 13:05:08 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Ja das ist in Ordnung.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1353824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1353824</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 28 Aug 2007 13:05:08 GMT</pubDate></item></channel></rss>