<?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[Vector-Templateklasse aus C++-Buch]]></title><description><![CDATA[<p>Aus einem C++-Buch hab ich folgende Vector-Templateklasse:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class Vector
{
    public:
        Vector(unsigned n=8) : size_(n), data(new T[size]) { }
        Vector(const Vector&lt;T&gt;&amp; v) : size_(v.size), data(new T[size]) {
            copy(v);
        }
        ~Vector() {
            delete [] data;
        }
        Vector&lt;T&gt;&amp; operator=(const Vector&lt;T&gt;&amp;);
        T&amp; operator[](unsigned i) const {
            return data[i];
        }
        unsigned size() { // 18
            return size;
        }
    private:
        T* data;
        unsigned size; // 23
        void copy(const Vector&lt;T&gt;&amp;);
};
</code></pre>
<p>Beim compilen werd ich allerdings mit Fehlermeldungen überschüttet! Vor allem diese hier versteh ich nicht:</p>
<pre><code>23 C:\Dev-Cpp\main4.cpp declaration of `unsigned int Vector&lt;T&gt;::size' 
18 C:\Dev-Cpp\main4.cpp conflicts with previous declaration `unsigned int Vector&lt;T&gt;::size()'
</code></pre>
<p>Okay, ihr werdet jetzt sagen, dass det gar nicht gut, dass ich das nur abschreibe aus dem Buch und es nicht wirklich verstehe, aber ich möchte es mindestens einmal compiliert bekommen! Und vor allem frage ich mich warum das so in dem Buch steht und nicht geht?!?</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/142554/vector-templateklasse-aus-c-buch</link><generator>RSS for Node</generator><lastBuildDate>Tue, 01 Sep 2026 21:04:48 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/142554.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 31 Mar 2006 14:29:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Vector-Templateklasse aus C++-Buch on Fri, 31 Mar 2006 14:30:07 GMT]]></title><description><![CDATA[<p>Aus einem C++-Buch hab ich folgende Vector-Templateklasse:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class Vector
{
    public:
        Vector(unsigned n=8) : size_(n), data(new T[size]) { }
        Vector(const Vector&lt;T&gt;&amp; v) : size_(v.size), data(new T[size]) {
            copy(v);
        }
        ~Vector() {
            delete [] data;
        }
        Vector&lt;T&gt;&amp; operator=(const Vector&lt;T&gt;&amp;);
        T&amp; operator[](unsigned i) const {
            return data[i];
        }
        unsigned size() { // 18
            return size;
        }
    private:
        T* data;
        unsigned size; // 23
        void copy(const Vector&lt;T&gt;&amp;);
};
</code></pre>
<p>Beim compilen werd ich allerdings mit Fehlermeldungen überschüttet! Vor allem diese hier versteh ich nicht:</p>
<pre><code>23 C:\Dev-Cpp\main4.cpp declaration of `unsigned int Vector&lt;T&gt;::size' 
18 C:\Dev-Cpp\main4.cpp conflicts with previous declaration `unsigned int Vector&lt;T&gt;::size()'
</code></pre>
<p>Okay, ihr werdet jetzt sagen, dass det gar nicht gut, dass ich das nur abschreibe aus dem Buch und es nicht wirklich verstehe, aber ich möchte es mindestens einmal compiliert bekommen! Und vor allem frage ich mich warum das so in dem Buch steht und nicht geht?!?</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1028089</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1028089</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Fri, 31 Mar 2006 14:30:07 GMT</pubDate></item><item><title><![CDATA[Reply to Vector-Templateklasse aus C++-Buch on Fri, 31 Mar 2006 14:37:21 GMT]]></title><description><![CDATA[<p>Eine Methode kann nicht gleich heißen wie ein Atrribut.</p>
<p>Gruß</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1028095</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1028095</guid><dc:creator><![CDATA[FireFlow]]></dc:creator><pubDate>Fri, 31 Mar 2006 14:37:21 GMT</pubDate></item><item><title><![CDATA[Reply to Vector-Templateklasse aus C++-Buch on Fri, 31 Mar 2006 14:39:16 GMT]]></title><description><![CDATA[<p>Du hast in deinem Code sowohl eine Methode <em>size</em> als auch eine Membervariable <em>size</em>, das kann ja nicht gutgehen.<br />
Und da im (copy)Konstruktor eine Variable namens <em>size_</em> initialisiert wird, gehe ich davon aus, dass du beim Abschreiben aus dem Buch den Underscore bei der Membervariablen vergessen hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1028097</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1028097</guid><dc:creator><![CDATA[michba]]></dc:creator><pubDate>Fri, 31 Mar 2006 14:39:16 GMT</pubDate></item><item><title><![CDATA[Reply to Vector-Templateklasse aus C++-Buch on Fri, 31 Mar 2006 14:44:44 GMT]]></title><description><![CDATA[<p>Also das steht in dem Buch wirklich ohne unterstrich drinn, den hatte ich vorher mal hinzugefügt zum testen, hatte mich aber dann entschlossen doch zu fragen.</p>
<p>Okay danke jetzt ist der Fehler schonmal weg:</p>
<pre><code class="language-cpp">template&lt;class T&gt;
class Vector
{
    public:
        Vector(unsigned n=8) : size_(n), data(new T[size]) { } // 7
        Vector(const Vector&lt;T&gt;&amp; v) : size_(v.size), data(new T[size]) {
            copy(v);
        }
        ~Vector() {
            delete [] data;
        }
        Vector&lt;T&gt;&amp; operator=(const Vector&lt;T&gt;&amp;);
        T&amp; operator[](unsigned i) const {
            return data[i];
        }
        unsigned size() {
            return size_;
        }
    private:
        T* data;
        unsigned size_;
        void copy(const Vector&lt;T&gt;&amp;);
};
</code></pre>
<p>Nun krieg ich allerdings folgenden Fehler, mit dem ich noch weniger anfangen kann:</p>
<pre><code>C:\Dev-Cpp\main4.cpp In constructor `Vector&lt;T&gt;::Vector(unsigned int) [with T = short int]': 
7 C:\Dev-Cpp\main4.cpp size in array new must have integral type 
7 C:\Dev-Cpp\main4.cpp aggregate value used where an integer was expected
</code></pre>
<p>Was mit einem intergralen Typ gemeint?</p>
<p>mfg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1028102</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1028102</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Fri, 31 Mar 2006 14:44:44 GMT</pubDate></item><item><title><![CDATA[Reply to Vector-Templateklasse aus C++-Buch on Fri, 31 Mar 2006 15:00:33 GMT]]></title><description><![CDATA[<p>joomoo schrieb:</p>
<blockquote>
<p>Was mit einem intergralen Typ gemeint?</p>
</blockquote>
<p>Änder auch dort <em>size</em> zu <em>size_</em>...<br />
Ein ganzzahliger (=integral) Typ wird für die Arraygröße benötigt, nicht die Adresse einer Methode.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1028118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1028118</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Fri, 31 Mar 2006 15:00:33 GMT</pubDate></item><item><title><![CDATA[Reply to Vector-Templateklasse aus C++-Buch on Fri, 31 Mar 2006 15:06:26 GMT]]></title><description><![CDATA[<p>Stimmt! Danke finix! Ich Trottel!</p>
<p>Jetzt hab ich alle ersetzt, aber der Code verabschiedet sich mit einem Laufzeitfehler (bzw. das Fenster wird gleich wieder geschlossen).</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

template&lt;class T&gt;
class Vector
{
    public:
        Vector(unsigned n=8) : size_(n), data(new T[size_]) { }
        Vector(const Vector&lt;T&gt;&amp; v) : size_(v.size_), data(new T[size_]) {
            copy(v);
        }
        ~Vector() {
            delete [] data;
        }
        Vector&lt;T&gt;&amp; operator=(const Vector&lt;T&gt;&amp;);
        T&amp; operator[](unsigned i) const {
            return data[i];
        }
        unsigned size() {
            return size_;
        }
    private:
        T* data;
        unsigned size_;
        void copy(const Vector&lt;T&gt;&amp;);
};

template&lt;class T&gt;
Vector&lt;T&gt;&amp; Vector&lt;T&gt;::operator=(const Vector&lt;T&gt;&amp; v) {
    size = v.size;
    data = new T[size];
    copy(v);
    return *this;
}

template&lt;class T&gt;
void Vector&lt;T&gt;::copy(const Vector&lt;T&gt;&amp; v) {
    unsigned min_size = (size_ &lt; v.size_ ? size_ : v.size_);
    for (int i = 0; i &lt; min_size; i++) {
        data[i] = v.data[i];
    }
}

int main()
{
    Vector&lt;short&gt; v;
    v[5] = 127;
    Vector&lt;short&gt; w = v, x(3);
    std::cout &lt;&lt; w.size();
    system(&quot;PAUSE&quot;);
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1028121</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1028121</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Fri, 31 Mar 2006 15:06:26 GMT</pubDate></item><item><title><![CDATA[Reply to Vector-Templateklasse aus C++-Buch on Fri, 31 Mar 2006 15:25:43 GMT]]></title><description><![CDATA[<p>Das ist ein Fehler, den der <a href="http://www.gimpel.com/" rel="nofollow">Lint</a> sofort finden würde <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>
<p>Die Member sind definiert in der Reihenfolge</p>
<pre><code class="language-cpp">private:
        T* data;
        unsigned size_;
</code></pre>
<p>also erst data und dann size_<br />
Im Konstruktor steht</p>
<pre><code class="language-cpp">public:
        Vector(unsigned n=8) : size_(n), data(new T[size_]) { }
</code></pre>
<p>size_ vor data. Dies kümmert aber den Compiler nicht. Die Initialisierung geschieht <strong>immer</strong> in der Reihenfolge der Definition in der Klasse - also data zuerst. Zu diesem Zeitpunkt steht in size_ alles mögliche drin, aber bestimmt nicht n!</p>
<p>Ändere also die Reihenfolge der Member</p>
<pre><code class="language-cpp">private:
        unsigned size_;  // size_ vor data
        T* data;
</code></pre>
<p>.. hol' Dir Dein Geld für das Buch zurück. In der Methode</p>
<pre><code class="language-cpp">T&amp; operator[](unsigned i) const {
            return data[i];
        }
</code></pre>
<p>ist das const falsch und in</p>
<pre><code class="language-cpp">unsigned size() {
            return size_;
        }
</code></pre>
<p>fehlt das const hinter size()</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1028134</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1028134</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 31 Mar 2006 15:25:43 GMT</pubDate></item><item><title><![CDATA[Reply to Vector-Templateklasse aus C++-Buch on Fri, 31 Mar 2006 16:38:14 GMT]]></title><description><![CDATA[<p>Darf ich noch anmerken dass default-int in C++ eigentlich auch nicht erlaubt ist? <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/1028188</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1028188</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Fri, 31 Mar 2006 16:38:14 GMT</pubDate></item><item><title><![CDATA[Reply to Vector-Templateklasse aus C++-Buch on Sat, 01 Apr 2006 12:00:24 GMT]]></title><description><![CDATA[<p>Vielen Dank für eure Hilfe! Jetzt klappt's:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

template&lt;class T&gt;
class Vector
{
    public:
        Vector(unsigned int n=8) : size_(n), data(new T[size_]) { }
        Vector(const Vector&lt;T&gt;&amp; v) : size_(v.size_), data(new T[size_]) {
            copy(v);
        }
        ~Vector() {
            delete [] data;
        }
        Vector&lt;T&gt;&amp; operator=(const Vector&lt;T&gt;&amp;);
        T&amp; operator[](unsigned int i) {
            return data[i];
        }
        unsigned int size() const {
            return size_;
        }
    private:
        unsigned int size_;
        T* data;
        void copy(const Vector&lt;T&gt;&amp;);
};

template&lt;class T&gt;
Vector&lt;T&gt;&amp; Vector&lt;T&gt;::operator=(const Vector&lt;T&gt;&amp; v) {
    size = v.size;
    data = new T[size];
    copy(v);
    return *this;
}

template&lt;class T&gt;
void Vector&lt;T&gt;::copy(const Vector&lt;T&gt;&amp; v) {
    unsigned int min_size = (size_ &lt; v.size_ ? size_ : v.size_);
    for (int i = 0; i &lt; min_size; i++) {
        data[i] = v.data[i];
    }
}

int main()
{
    Vector&lt;short&gt; v;
    v[5] = 127;
    Vector&lt;short&gt; w = v, x(3);
    std::cout &lt;&lt; w.size() &lt;&lt; std::endl;
    std::cout &lt;&lt; x.size() &lt;&lt; std::endl;
    std::cout &lt;&lt; v[5] &lt;&lt; std::endl;
    system(&quot;PAUSE&quot;);
}
</code></pre>
<p>Jaaaa, ich weiß, dass das Buch nicht so gut ist, aber es war runtergesetzt. Immerhin lerne ich was dabei <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>
<p>mfg.</p>
<p>edit: ist übrigens dieses buch: <a href="http://www.amazon.de/exec/obidos/ASIN/3826609107/qid=1143892707/sr=8-2/ref=sr_8_xs_ap_i2_xgl/303-3420400-9284243" rel="nofollow">http://www.amazon.de/exec/obidos/ASIN/3826609107/qid=1143892707/sr=8-2/ref=sr_8_xs_ap_i2_xgl/303-3420400-9284243</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1028305</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1028305</guid><dc:creator><![CDATA[joomoo]]></dc:creator><pubDate>Sat, 01 Apr 2006 12:00:24 GMT</pubDate></item><item><title><![CDATA[Reply to Vector-Templateklasse aus C++-Buch on Sat, 01 Apr 2006 12:48:36 GMT]]></title><description><![CDATA[<p>warez666 schrieb:</p>
<blockquote>
<p>Das Buch schneidet einige wichtige Bereiche der C++-Programmierung an und steckt auch voller Übungsaufgaben, die durch das gesamte Buch begleiten, was diesem Werk auch hoch anzurechnen ist. Die Fehler, die in diesem Buch stecken, sind jedoch enorm. Wie bereits erwähnt: Falsche Fragen zu den Kapiteln, falsche Antworten, fehlerhafte Quellcodes und und und ... meiner Meinung nach, ist es in keinem Fall zu empfehlen. Da sollte man lieber ein paar Euro mehr investieren und sich ein ordentliches Buch kaufen.</p>
</blockquote>
<p>*g*</p>
<p>hol dir ein anderes...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1028573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1028573</guid><dc:creator><![CDATA[DrOetker]]></dc:creator><pubDate>Sat, 01 Apr 2006 12:48:36 GMT</pubDate></item></channel></rss>