<?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 in .hpp vorwärtsdeklarieren]]></title><description><![CDATA[<p>Warum geht das hier nicht. Wie kann ich dem Compiler sagen, dass er noch ein bisschen warten soll, den das &quot;std::vector&quot; kommt bald in der &quot;.cpp&quot;.</p>
<p>Crypt.hpp</p>
<pre><code class="language-cpp">#include &lt;string&gt;

namespace std
{
    class vector; //Vorwärtsdeklaration
}

namespace cr
{
    struct detailsCrypt;

    class Crypt
    {
        public:
        Crypt();
        std::string create_key() const;
        unsigned short transform_key(const std::string &amp;key) const;
        unsigned short transform_key(const std::string &amp;key, const std::vector&lt;unsigned short&gt; &amp;random_numbers) const; //Hier gibts Probleme, aber es ist doch eine Referenz!?
        unsigned short downsize_key(unsigned short key) const;

        private:
        detailsCrypt *cd_data;
    };
}
</code></pre>
<p>Crypt.cpp</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;vector&gt; //Hier kommts doch schon
#include &quot;crypt.hpp&quot;
#include &quot;random.hpp&quot;
using namespace std;
using namespace rd;

namespace cr
{
    struct detailsCrypt
    {
        vector&lt;unsigned short&gt; rnd_numbers_key;
        vector&lt;unsigned short&gt; rnd_numbers_2byte;
        vector&lt;unsigned short&gt; rnd_numbers_4byte;
    };

    Crypt::Crypt()
    :cd_data(new detailsCrypt)
    {

    }

    string Crypt::create_key() const
    {
        string key;
        for(int i=0;i&lt;6;++i)
        {
            char temp=randomize.rnd(97,122);
            key +=temp;
        }
        return key;
    }

    unsigned short Crypt::transform_key(const string &amp;key) const
    {
        unsigned short amount=0;
        for(int i=0;i&lt;6;++i)
        {
            cd_data-&gt;rnd_numbers_key.push_back(randomize.rnd(123,1000));
            amount +=cd_data-&gt;rnd_numbers_key.back() - key[i];
        }
        return amount;
    }

    unsigned short Crypt::transform_key(const string &amp;key, const vector&lt;unsigned short&gt; &amp;random_numbers) const
    {
        unsigned short amount=0;
        for(int i=0;i&lt;6;++i)
        {
            amount +=random_numbers[i] - key[i];
        }
        return amount;
    }

    unsigned short downsize_key(unsigned short raw_key) const
    {
        if(raw_key &lt; 12)
        {
            raw_key +=12;
        }

        if((raw_key % 12) == 0)
        {
            raw_key /=12;
        }
        else
        {
            raw_key = ((raw_key - (raw_key % 12)) / 12);
        }

        return raw_key;
    }
}
</code></pre>
<p>ERROR:<br />
crypt.hpp:18: error: `std::vector' is not a template</p>
<p>Oder liegt der Fehler vll. wo anderst im Code?</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/205564/std-vector-in-hpp-vorwärtsdeklarieren</link><generator>RSS for Node</generator><lastBuildDate>Fri, 09 Oct 2026 06:29:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/205564.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 15 Feb 2008 15:36:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::vector in .hpp vorwärtsdeklarieren on Fri, 15 Feb 2008 15:36:04 GMT]]></title><description><![CDATA[<p>Warum geht das hier nicht. Wie kann ich dem Compiler sagen, dass er noch ein bisschen warten soll, den das &quot;std::vector&quot; kommt bald in der &quot;.cpp&quot;.</p>
<p>Crypt.hpp</p>
<pre><code class="language-cpp">#include &lt;string&gt;

namespace std
{
    class vector; //Vorwärtsdeklaration
}

namespace cr
{
    struct detailsCrypt;

    class Crypt
    {
        public:
        Crypt();
        std::string create_key() const;
        unsigned short transform_key(const std::string &amp;key) const;
        unsigned short transform_key(const std::string &amp;key, const std::vector&lt;unsigned short&gt; &amp;random_numbers) const; //Hier gibts Probleme, aber es ist doch eine Referenz!?
        unsigned short downsize_key(unsigned short key) const;

        private:
        detailsCrypt *cd_data;
    };
}
</code></pre>
<p>Crypt.cpp</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;vector&gt; //Hier kommts doch schon
#include &quot;crypt.hpp&quot;
#include &quot;random.hpp&quot;
using namespace std;
using namespace rd;

namespace cr
{
    struct detailsCrypt
    {
        vector&lt;unsigned short&gt; rnd_numbers_key;
        vector&lt;unsigned short&gt; rnd_numbers_2byte;
        vector&lt;unsigned short&gt; rnd_numbers_4byte;
    };

    Crypt::Crypt()
    :cd_data(new detailsCrypt)
    {

    }

    string Crypt::create_key() const
    {
        string key;
        for(int i=0;i&lt;6;++i)
        {
            char temp=randomize.rnd(97,122);
            key +=temp;
        }
        return key;
    }

    unsigned short Crypt::transform_key(const string &amp;key) const
    {
        unsigned short amount=0;
        for(int i=0;i&lt;6;++i)
        {
            cd_data-&gt;rnd_numbers_key.push_back(randomize.rnd(123,1000));
            amount +=cd_data-&gt;rnd_numbers_key.back() - key[i];
        }
        return amount;
    }

    unsigned short Crypt::transform_key(const string &amp;key, const vector&lt;unsigned short&gt; &amp;random_numbers) const
    {
        unsigned short amount=0;
        for(int i=0;i&lt;6;++i)
        {
            amount +=random_numbers[i] - key[i];
        }
        return amount;
    }

    unsigned short downsize_key(unsigned short raw_key) const
    {
        if(raw_key &lt; 12)
        {
            raw_key +=12;
        }

        if((raw_key % 12) == 0)
        {
            raw_key /=12;
        }
        else
        {
            raw_key = ((raw_key - (raw_key % 12)) / 12);
        }

        return raw_key;
    }
}
</code></pre>
<p>ERROR:<br />
crypt.hpp:18: error: `std::vector' is not a template</p>
<p>Oder liegt der Fehler vll. wo anderst im Code?</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1456602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1456602</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Fri, 15 Feb 2008 15:36:04 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector in .hpp vorwärtsdeklarieren on Fri, 15 Feb 2008 15:41:41 GMT]]></title><description><![CDATA[<p>Ja, der Fehler liegt bei dir. Hast zwar gesagt das es ei std::vector gibt, und das muckiert er auch korrekt. Steht doch da: ist kein Template. Und wo hast du ein Template vordeklariert?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1456604</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1456604</guid><dc:creator><![CDATA[Artchi]]></dc:creator><pubDate>Fri, 15 Feb 2008 15:41:41 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector in .hpp vorwärtsdeklarieren on Fri, 15 Feb 2008 15:41:59 GMT]]></title><description><![CDATA[<p>Deine Vorwärtsdeklaration erwähnt aber nicht, das std::vector ein template ist. Steht doch in der Fehlermeldung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
Und wenn der Compiler noch nicht weiß, das std::vector ein template ist macht std::vector&lt;unsigned short&gt; keinen sinn <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>btw: im namespace std:: darfst du IMO nur follständige spezialisierungen anlegen, alles andere - und somit au ch deine Forward-deklaration - ist IMO undefiniert</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1456605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1456605</guid><dc:creator><![CDATA[darthdespotism]]></dc:creator><pubDate>Fri, 15 Feb 2008 15:41:59 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector in .hpp vorwärtsdeklarieren on Fri, 15 Feb 2008 15:45:27 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/1463">@Artchi</a><br />
Templat vordeklariert, wie meinst du das? Was muss ich tun?</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1456610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1456610</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Fri, 15 Feb 2008 15:45:27 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector in .hpp vorwärtsdeklarieren on Fri, 15 Feb 2008 15:48:52 GMT]]></title><description><![CDATA[<p>Versuch mal</p>
<pre><code class="language-cpp">namespace std
{
    class vector&lt;typename&gt;; //Vorwärtsdeklaration
}
</code></pre>
<p>EDIT://<br />
und selbst das wird nicht funktionieren da vektor als zweiten Template-Parameter noch den Allocator bekommt, der zwar ein Default-Argument hat, aber bei deiner Forward-Deklaration angegeben werden müsste - und dann kannst du IMO den const vector&lt;&gt;&amp; nicht verwenden.</p>
<p>Lass es einfach sein und binde den Vektor ein wenn du ihn brauchst <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1456614</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1456614</guid><dc:creator><![CDATA[darthdespotism]]></dc:creator><pubDate>Fri, 15 Feb 2008 15:48:52 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector in .hpp vorwärtsdeklarieren on Fri, 15 Feb 2008 15:52:08 GMT]]></title><description><![CDATA[<p>darthdespotism schrieb:</p>
<blockquote>
<p>btw: im namespace std:: darfst du IMO nur follständige spezialisierungen anlegen, alles andere - und somit au ch deine Forward-deklaration - ist IMO undefiniert</p>
</blockquote>
<p>Genauer: jede Art Spezialisierung (explizit <em>oder</em> partiell) ist zulässig, sofern ein Nicht-Standard-Typ/Template in der Argumentliste auftaucht (die 2. Einschränkung deshalb, weil die Standardbibliothek ja bereits selbst für solche Typen bereits spezialisiert sein könnte).<br />
Anders gesagt, jede Art Deklaration, die die Überladunsgauflösung beeinflußt (das wird sich in C++0x ändern) oder potentiell zu Mehrdeutigkeiten führt, ist in std unzulässig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1456624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1456624</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 15 Feb 2008 15:52:08 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector in .hpp vorwärtsdeklarieren on Fri, 15 Feb 2008 15:57:30 GMT]]></title><description><![CDATA[<p>Lass es einfach sein und binde den Vektor ein wenn du ihn brauchst</p>
<p>darthdespotism schrieb:</p>
<blockquote>
<p>Lass es einfach sein und binde den Vektor ein wenn du ihn brauchst</p>
</blockquote>
<p>Okay. Bin grad irgendwie auf nem Compilierzeit verküzungs Trip :D. Na ja, dann kann ich mir den cd_data Zeiger jetzt auch stecken.</p>
<p>MfG<br />
Stromberg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1456630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1456630</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Fri, 15 Feb 2008 15:57:30 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector in .hpp vorwärtsdeklarieren on Fri, 15 Feb 2008 16:01:44 GMT]]></title><description><![CDATA[<p>std::camper weiß es wieder genau <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>allgemein würde ich std::sring und die container immer per header einbinden und nicht versuchen sie vorwärts zu deklarieren. Auch wenn im Standard steht, dass z.B. vector deklariert ist als vector&lt;typename T, class Alloc = AllocatorT&gt; &gt; oder so ähnlich, ist es den Implementierern der Bibliotheken überlassen, zusätzliche Templateparameter (mit entsprechenden defaults) zu deklarieren, womit dann jede forward-Deklaration wieder zunichte gemacht wird.<br />
für &lt;iostream&gt; gibts extra einen forward-header namens &lt;iosfwd&gt;, lediglich bei algorithmen, std::pair und anderen kleinen konstrukten kann man sich überlegen, ob man sie vorwärtsdeklariert. Allerdings wird man da meines Wissens nicht so unheimlich viel mit erkaufen, da es sich bei alledem hauptsächlich um templates handelt, die vom Compiler erst dann umgesetzt werden wenn solch ein template auch instantiiert wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1456633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1456633</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 15 Feb 2008 16:01:44 GMT</pubDate></item><item><title><![CDATA[Reply to std::vector in .hpp vorwärtsdeklarieren on Sat, 16 Feb 2008 13:25:45 GMT]]></title><description><![CDATA[<p>Zum Verkürzen der Compilezeit stand in nem Buch der Tipp einfach alle std::Header in einen &quot;alle_std_header.hpp&quot; zu packen und dann auf Precompilierte Header zu vertrauen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1457096</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1457096</guid><dc:creator><![CDATA[darthdespotism]]></dc:creator><pubDate>Sat, 16 Feb 2008 13:25:45 GMT</pubDate></item></channel></rss>