<?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[Rückgabewert?]]></title><description><![CDATA[<pre><code class="language-cpp">Bitvector* Bitvector::createBitVector(unsigned int bits)
{
	bv = new unsigned char[bits/8];

	for(unsigned int i=0; i&lt;(bits/8+1); i++)
	{
		bv[i] = 0;
	}

//return bv;
//return *bv;
}
</code></pre>
<p>Obige Methode muss meinen eigenen Typ Bitvector* zurückliefern, der im Konstruktor als char* bv; definiert ist.</p>
<p>Leider funktionieren beide (momentan) auskommentierten Rückgabewerte nicht. Was mache ich falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/305498/rückgabewert</link><generator>RSS for Node</generator><lastBuildDate>Sat, 08 Aug 2026 19:59:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/305498.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 30 Jun 2012 17:03:12 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Rückgabewert? on Sat, 30 Jun 2012 17:03:12 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">Bitvector* Bitvector::createBitVector(unsigned int bits)
{
	bv = new unsigned char[bits/8];

	for(unsigned int i=0; i&lt;(bits/8+1); i++)
	{
		bv[i] = 0;
	}

//return bv;
//return *bv;
}
</code></pre>
<p>Obige Methode muss meinen eigenen Typ Bitvector* zurückliefern, der im Konstruktor als char* bv; definiert ist.</p>
<p>Leider funktionieren beide (momentan) auskommentierten Rückgabewerte nicht. Was mache ich falsch?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228728</guid><dc:creator><![CDATA[vip*r]]></dc:creator><pubDate>Sat, 30 Jun 2012 17:03:12 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert? on Sat, 30 Jun 2012 17:09:25 GMT]]></title><description><![CDATA[<p>Du willst den Datentyp <code>Bitvector*</code> zurückgeben. <code>bv</code> hat aber den Datentyp <code>unsigned char*</code> . Das ist das Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228733</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228733</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 30 Jun 2012 17:09:25 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert? on Sat, 30 Jun 2012 17:13:16 GMT]]></title><description><![CDATA[<p>Hm, genauso schreibt es mir der Compiler auch. Wie verhindere ich das nun? Muss ich mit &quot;new&quot; einen neune (den eigenen Datentyp) anfordern, oder muss ich den Konstruktor auf Bitvector* bv; ändern?</p>
<p>Edit das im Konstruktor zu ändern ist wohl Blödsinn. Irgendwo muss ich ja mal festlegen, dass es eigentlich chars sind</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228735</guid><dc:creator><![CDATA[vip*r]]></dc:creator><pubDate>Sat, 30 Jun 2012 17:13:16 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert? on Sat, 30 Jun 2012 19:18:45 GMT]]></title><description><![CDATA[<p>vip@r schrieb:</p>
<blockquote>
<p>Edit das im Konstruktor zu ändern ist wohl Blödsinn. Irgendwo muss ich ja mal festlegen, dass es eigentlich chars sind</p>
</blockquote>
<p>Das ist ohnehin Blödsinn. Schau dir mal <code>boost::dynamic_bitset</code> an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228771</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Sat, 30 Jun 2012 19:18:45 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert? on Sun, 01 Jul 2012 06:37:24 GMT]]></title><description><![CDATA[<p>vip@r schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Bitvector* Bitvector::createBitVector(unsigned int bits)
{
	bv = new unsigned char[bits/8];

	for(unsigned int i=0; i&lt;(bits/8+1); i++)
	{
		bv[i] = 0;
	}

//return bv;
//return *bv;
}
</code></pre>
</blockquote>
<p>Was soll das denn werden, wenn's fertig ist? Erklär mal. Dann kann man dir ggf zeigen, wie's richtig geht ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228810</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sun, 01 Jul 2012 06:37:24 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert? on Sun, 01 Jul 2012 08:36:22 GMT]]></title><description><![CDATA[<p>TyRoXx schrieb:</p>
<blockquote>
<p>vip@r schrieb:</p>
<blockquote>
<p>Edit das im Konstruktor zu ändern ist wohl Blödsinn. Irgendwo muss ich ja mal festlegen, dass es eigentlich chars sind</p>
</blockquote>
<p>Das ist ohnehin Blödsinn. Schau dir mal <code>boost::dynamic_bitset</code> an.</p>
</blockquote>
<p>Er soll sich <code>std::vector&lt;bool&gt;</code> und ein bestimmtes Makro angucken.</p>
<p>Aber was er jetzt wählt ist auch egal, hauptsache einen Container.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228824</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228824</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 01 Jul 2012 08:36:22 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert? on Sun, 01 Jul 2012 14:21:52 GMT]]></title><description><![CDATA[<p>Ja, Container. Meine Übungsaufgabe besteht aber darin einen Bitvector mit chars nachzubauen. Versteht ihr?</p>
<pre><code class="language-cpp">Bitvector* Bitvector::createBitVector(unsigned int bits)
{
    bv = new unsigned char[bits/8];

    for(unsigned int i=0; i&lt;(bits/8+1); i++)
    {
        bv[i] = 0;
    }

//return bv;
//return *bv;
}
</code></pre>
<p>Das ist eine Methode die die Klasse Bitvector zur Verfügung stellt. Diese Methode soll einen Bitvector (aneinandergereihte chars!) in Abhängigkeit von bits erstellen. Dazu hab ich aber noch einen Konstruktor entworfen:</p>
<pre><code class="language-cpp">Bitvector::Bitvector()
{
	*bv = 0;
	bits = 0;
	byte = 0;
}
</code></pre>
<p>Und hier noch zur Vollständigkeit halber das header-File:</p>
<pre><code class="language-cpp">#ifndef BITVECTOR_H
#define BITVECTOR_H

class Bitvector
{
private:
	unsigned int bits;	//Anzahl der Bits im Bitvektor
	unsigned char byte;	//chars aus denen sich der Bitvektor zusammensetzt
	unsigned char* bv;	//pointer auf die aneinandergereihten chars

public:
	Bitvector();
	//Bitvector(unsigned int bits);
	~Bitvector();

	Bitvector* createBitVector(unsigned int bits);
	void printBitVector();

	char getBit(unsigned int bitNr);
	void setBit(Bitvector* bv, unsigned int bitNr);
	void resetBit(Bitvector* bv, unsigned int bitNr);
	Bitvector* getSlice(Bitvector* bv, unsigned int pos, unsigned int n);
	Bitvector* addBitVector(Bitvector* s1, Bitvector* s2);
};

#endif BITVECTOR_H
</code></pre>
<p>Mein Problem nun ist, wenn ich in der main nun eine neue Bitvector Variable erstelle und diese mit bv-&gt;createBitVector(10) erstellen lassen möchte, sagt mir der Compiler, dass bv nicht initialisiert sei.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228893</guid><dc:creator><![CDATA[vip*r]]></dc:creator><pubDate>Sun, 01 Jul 2012 14:21:52 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert? on Sun, 01 Jul 2012 15:37:15 GMT]]></title><description><![CDATA[<p>vip@r schrieb:</p>
<blockquote>
<pre><code class="language-cpp">Bitvector* Bitvector::createBitVector(unsigned int bits)
{
	bv = new unsigned char[bits/8];

	for(unsigned int i=0; i&lt;(bits/8+1); i++)
	{
		bv = 0;
	}

//return bv;
//return *bv;
}
</code></pre>
</blockquote>
<ul>
<li></li>
</ul>
<p>Was bitte willst du denn zurückgeben? Du setzt doch nur die Membervariablen. Dafür reicht doch eigentlich ein [i]void*.</p>
<p>Edit: Das BBCode-Tag [ /i] funktioniert nicht :o</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228922</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228922</guid><dc:creator><![CDATA[DerCoder]]></dc:creator><pubDate>Sun, 01 Jul 2012 15:37:15 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert? on Sun, 01 Jul 2012 16:03:13 GMT]]></title><description><![CDATA[<p>DerCoder schrieb:</p>
<blockquote>
<p>Edit: Das BBCode-Tag [ /i] funktioniert nicht :o</p>
</blockquote>
<p>Das gibt es nicht. Du willst [/i]. Und man nimmt auch nicht das <em>Kursiv</em>-Tag sondern <code>Courier</code> .<br />
Außerdem, sieh dir mal die auskommentierten Zeilen an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228935</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228935</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 01 Jul 2012 16:03:13 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert? on Sun, 01 Jul 2012 16:13:19 GMT]]></title><description><![CDATA[<p>Danke Leute, ich hab das &quot;Problem&quot; mittlerweile selbst in Griff bekommen. Das war in der Tat trivialer als ich gedacht habe.</p>
<p>Jetzt hab ich allerdings ein neues Problem mit einer Methode. Compiler sagt linker-error.</p>
<p>header-Deklaration:</p>
<pre><code class="language-cpp">Bitvector* addBitVector(Bitvector* s1, Bitvector* s2);
</code></pre>
<p>Implementierung:</p>
<pre><code class="language-cpp">Bitvector* addBitVector(Bitvector* bv1, Bitvector* bv2)
{
	//char temp = bv1-&gt;getBit(0);

return 0;	//Dummy return-Wert
}
</code></pre>
<p>Aufruf:</p>
<pre><code class="language-cpp">Bitvector* addition = bv.addBitVector(slice1, slice2);
</code></pre>
<p>slice1, slice2 sind PointerVars auf einen Bitvector. Der compiler gibt mir diese fehlermeldung aus:</p>
<pre><code>Fehler	1	error LNK2019: Verweis auf nicht aufgelöstes externes Symbol &quot;&quot;public: class Bitvector * __thiscall Bitvector::addBitVector(class Bitvector *,class Bitvector *)&quot; (?addBitVector@Bitvector@@QAEPAV1@PAV1@0@Z)&quot; in Funktion &quot;_main&quot;.	

Fehler	2	error LNK1120: 1 nicht aufgelöste externe Verweise.
</code></pre>
<p>Ich weiß ehrlich gesagt nich was da jetzt falsch sein soll, weil ich ja noch gar nichts in der Methode versaut haben kann. Ich hab ja noch gar nichts gecoded!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228940</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228940</guid><dc:creator><![CDATA[vip*r]]></dc:creator><pubDate>Sun, 01 Jul 2012 16:13:19 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert? on Sun, 01 Jul 2012 16:21:10 GMT]]></title><description><![CDATA[<p>vip@r schrieb:</p>
<blockquote>
<p>Ich hab ja noch gar nichts gecoded!</p>
</blockquote>
<p>Und genau da duerfte dein Linkerfehler herrühren. Er findet die Funktion nicht, weil sie nicht da ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228945</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228945</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Sun, 01 Jul 2012 16:21:10 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert? on Sun, 01 Jul 2012 16:31:12 GMT]]></title><description><![CDATA[<p>Hm, nun hab ich die Mehtode so umgeschrieben:</p>
<pre><code class="language-cpp">Bitvector* addBitVector(Bitvector* s1, Bitvector* s2)
{
	char temp = s1-&gt;getBit(0);

return 0;
}
</code></pre>
<p>Leider bekomme ich nun noch immer die Fehlermeldung. Jetzt ist die Methode aber sicherlich &quot;sichtbar&quot;, oder?</p>
<p>Edit:</p>
<p>Ich bin dumm. Es fehlt die Angabe aus welchem Scope die Methode stammt! Es muss natürlich so heißen:</p>
<pre><code class="language-cpp">Bitvector* Bitvector::addBitVector(Bitvector* s1, Bitvector* s2)
{
	char temp = s1-&gt;getBit(0);

return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2228952</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228952</guid><dc:creator><![CDATA[vip*r]]></dc:creator><pubDate>Sun, 01 Jul 2012 16:31:12 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert? on Sun, 01 Jul 2012 16:30:24 GMT]]></title><description><![CDATA[<p>Hacker schrieb:</p>
<blockquote>
<p>DerCoder schrieb:</p>
<blockquote>
<p>Edit: Das BBCode-Tag [ /i] funktioniert nicht :o</p>
</blockquote>
<p>Das gibt es nicht. Du willst [/i].</p>
</blockquote>
<p>Achwas, natürlich gibt es das nicht <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="😉"
    /> Ich hatte angenommen, dass das einzelne Schließtag herausgefiltert wird.</p>
<p>Hacker schrieb:</p>
<blockquote>
<p>Außerdem, sieh dir mal die auskommentierten Zeilen an.</p>
</blockquote>
<p>Ja, und nu? Willst du mir sagen, dass du statt der erwarteten <code>Bitvector</code> -Referenz, rotzfrech einen <code>unsigned char</code> -Pointer zurückgeben willst?</p>
<p>Hacker schrieb:</p>
<blockquote>
<p>Und man nimmt auch nicht das <em>Kursiv</em>-Tag sondern <code>Courier</code> .</p>
</blockquote>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228953</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228953</guid><dc:creator><![CDATA[DerCoder]]></dc:creator><pubDate>Sun, 01 Jul 2012 16:30:24 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert? on Sun, 01 Jul 2012 16:55:51 GMT]]></title><description><![CDATA[<p>DerCoder schrieb:</p>
<blockquote>
<p>Hacker schrieb:</p>
<blockquote>
<p>Außerdem, sieh dir mal die auskommentierten Zeilen an.</p>
</blockquote>
<p>Ja, und nu? Willst du mir sagen, dass du statt der erwarteten <code>Bitvector</code> -Referenz, rotzfrech einen <code>unsigned char</code> -Pointer zurückgeben willst?</p>
</blockquote>
<p>Was für eine Referenz? Auf jeden Fall <strong>muss</strong> er etwas zurückgeben- das ist eine factory-Methode. Google mal danach.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228963</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228963</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Sun, 01 Jul 2012 16:55:51 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert? on Sun, 01 Jul 2012 17:10:28 GMT]]></title><description><![CDATA[<p>vip@r schrieb:</p>
<blockquote>
<p>Ja, Container. Meine Übungsaufgabe besteht aber darin einen Bitvector mit chars nachzubauen. Versteht ihr?</p>
</blockquote>
<p>Jepp.</p>
<p>Mach's so:</p>
<pre><code class="language-cpp">#ifndef BITVECTOR_H
#define BITVECTOR_H

#include &lt;vector&gt;

class Bitvector
{
public:
    Bitvector()
    : bits(0)
    {}

    explicit Bitvector(unsigned int bits);

    unsigned int size() const
    { return bits; }

    int getBit(unsigned int index) const;

    void setBit(unsigned int index);
    void resetBit(unsigned int index);

    void setBit(unsigned int index, int to_value)
    { if (to_value) setBit(index); else resetBit(index); }

private:
    unsigned int bits;
    std::vector&lt;unsigned char&gt; data;
};

#endif BITVECTOR_H
</code></pre>
<p>Die Semantik von slice und addbitvector ist mir allerdings nicht ganz klar, habe ich deswegen weggelassen. Was auch vielleicht nicht sofort auffällt: Ich fügte hinter getBit ein const ein.</p>
<p>in der cpp-Datei entsprechend noch den Konstruktor, getBit(unsigned), setBit(unsigned) sowie resetBit(unsigned) implementieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228969</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sun, 01 Jul 2012 17:10:28 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert? on Sun, 01 Jul 2012 17:09:47 GMT]]></title><description><![CDATA[<p>Für eine Factory-Methode sollte diese aber 'static' sein.</p>
<p>Ansonsten sieht es mir eher so aus, als ob einfach 'this' zurückgegeben werden soll. Aber das ist natürlich logisch völliger Blödsinn, denn zum Erzeugen sollten man ja den (bisher auskommentierten) Konstruktor benutzen.</p>
<p>Und auch die Methoden 'setBit' und 'resetBit' haben überflüssigerweise den 'Bitvector *' als Parameter (anstatt auf 'this' intern zu arbeiten).</p>
<p>Daher die Frage an vip@r: hast du das Klassendesign selber erstellt oder wurde es dir so gegeben (und du sollst nur die Funktionen ausprogrammieren)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228970</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228970</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Sun, 01 Jul 2012 17:09:47 GMT</pubDate></item><item><title><![CDATA[Reply to Rückgabewert? on Sun, 01 Jul 2012 18:21:34 GMT]]></title><description><![CDATA[<p>Danke für eure Antworten! Ich hab mir diese factory-Methoden mal durchgesehen. Ich werde mir das wenn mal Zeit ist genauer anschaun. Da das in meiner Schule gar nicht gelehrt wurde.</p>
<p>Ich hab jezt übrigens ein weiteres Problem:</p>
<p>Ich soll jetzt noch eine binäre Addition von zwei solchen Bitvektoren coden. Vorzustellen hat man sich das so:</p>
<p>Ich hab einen Bitvektor s1 und einen Bitvektor s2 und das sind ja eigentlich char*. Ich soll die jetzt binär addieren. Wie die binäre Addition schriftlich geht (Übertrag usw.) ist mir natürlich klar. Wie ich das aber jetzt Softwaretechnisch umsetzen soll ist mir nicht ganz klar. Könnt ihr mir da helfen?</p>
<p>Ich hab mal versucht das soweit umzusetzen:</p>
<pre><code class="language-cpp">Bitvector* Bitvector::addBitVector(Bitvector* s1, Bitvector* s2)
{
	unsigned char maske = 1;

	for(unsigned int i=((s1-&gt;bits) / 8) + 1; i&gt;0; i--)
	{
		s1-&gt;bv[byte-1];   //Adressierung des richtigen Bytes
		s2-&gt;bv[byte-1];   //Adressierung des richtigen Bytes
                //falls der bitvektor aus mehreren chars besteht, muss ich ja beim hintersten anfangen und diese 
                //äußerste for-Schleife schaltet mir quasi die bytes durch
		for(unsigned int j=s1-&gt;bits; j&gt;0; j--)   //in bits steht die Anzahl der gesetzten und notwendigen Bits von s1
		{
                    maske = maske &lt;&lt; 1;		//Auswahl des Bits
		}

                for(unsigned int j=(s2-&gt;bits); j&gt;0; j--)
		{
			maske = maske &lt;&lt; 1;		//Auswahl des Bits
		}
                //die maske soll mir die einzelnen Bits maskieren.
                //Wie aber mache ich das dann konkret weiter? Ich mein, ich muss ja s1 und s2 &quot;verunden&quot;
                //wie regle ich den zusätzlichen Übertrag, der an vorderster Stelle komt?
	}

return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2229001</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2229001</guid><dc:creator><![CDATA[vip*r]]></dc:creator><pubDate>Sun, 01 Jul 2012 18:21:34 GMT</pubDate></item></channel></rss>