<?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[Problem mit Speicherzuordnung]]></title><description><![CDATA[<p>HI, bin ganz neu hier und hab gleich mal ne Frage.</p>
<p>Habe ein Problem bei dem Programm zur Laufzeitmessung.<br />
Da ich mich mit c++ noch net so gut auskenne (habs im Studium erst seit 3 wochen) weis ich auch nicht was mir der Compiler damit sagen will.</p>
<p>hier mal der Code:</p>
<p>Vector.h</p>
<pre><code>#ifndef _VECTOR_H
#define _VECTOR_H
#include &lt;iostream.h&gt;

class Vector
{
public:
		// Verwaltungsmethoden
	Vector(const int=10);				// Konstruktor
   	Vector(const Vector&amp; n);			// Kopierkonstruktor
	Vector(int n, int a[]);				// Konstruktor
	Vector&amp; operator=(const Vector&amp; v);		// Zuweisung
	~Vector() {delete[] digits;}			// Destruktor

		// Nur-Lese Methoden

	int upper() const;				// Vectorl�ge
	void print(ostream&amp;) const;			// Ausgabe
	Vector operator+(const Vector&amp; v) const;	// Additionsoperator

		// �Aenderungsmethoden

	int&amp; operator[](const int i);			// Zuweisung

private:
							// Datenelemente und interne Methoden
   int* digits;              				// Zeiger auf das Ziffernfeld 
   unsigned ndigits;          				// Anzahl der Ziffern
};

ostream&amp; operator&lt;&lt; (ostream&amp;, const Vector&amp;);

#endif
</code></pre>
<p>Vector.cpp</p>
<pre><code>#include &lt;iostream.h&gt;
#include &quot;Vector.h&quot;

Vector::Vector(const Vector&amp; n)		// Standartkopierkonstruktor
{
	ndigits=n.ndigits;
	digits= new int [ndigits];
	for (unsigned i=0 ; i&lt; ndigits ; i++)
	    digits[i]=n.digits[i];
}

Vector::Vector(const int n)// Konstruktor (Objekt Feld bereitstellen)
{

	ndigits = n;
	digits = new int[ndigits];// Speicher reservieren
	for (unsigned i=0 ; i&lt;ndigits ; i++)
		digits[i]=0;
}

int&amp; Vector::operator[](const int i)// Methode fuer Benutzung von []
{
	if (2147483647 &lt; i &gt; -2147483648)
	{
		cout &lt;&lt; &quot;Wertebereich ueberschritten...Wert auf 10 gesetzt&quot; &lt;&lt; endl;
		return (digits[10]);
	}
	return (digits[i]);// Referenz auf int Wert des angeforderten Elementes
}

int Vector::upper() const	// bestimmt die Vectorlaenge
{
	return ndigits;
}

void Vector::print(ostream&amp; strm) const	// Ausgabemethode fuer alle Objekte
{					// vom Typ der KLasse Vector
	for (unsigned i=0 ; i&lt;ndigits ; i++)
		strm &lt;&lt; digits[i] &lt;&lt; ' ';

	strm &lt;&lt; endl;
}

Vector::Vector(int n, int a[])		// Konstruktor (Laenge und Feld)
{
	digits = new int[ndigits = n];
	for (unsigned i=0 ; i&lt;ndigits ; i++)
		digits[i] = a[i];
}

Vector&amp; Vector::operator=(const Vector&amp; n) // Zuweisungsoperator
{
   if (&amp;n != this)                 // c = c wenn &amp;n == this
   {
      delete[] digits;             // Loeschen im Zielobjekt
      unsigned i = n.ndigits;
      digits = new int[ndigits=i];// dyn.Speicherplatz fuer
      int* p = digits;            // Zeiger im Zielobjekt
      const int* q = n.digits;    // Zeiger im Quellobjekt
      while (i--)  *p++ = *q++;    // Kopieren von 
   } 
   return *this;
}

Vector Vector::operator+(const Vector&amp; v) const// Additionskonstuktor
{digits = new int[ndigits = n];
	for (unsigned i=0 ; i&lt;ndigits ; i++)
		digits[i] = a[i];
}
	int s;
	if (ndigits!=v.ndigits)
		cout &lt;&lt; &quot;Die zu addierenden Vektoren sind unterschiedlich lang&quot; &lt;&lt; endl;
	if (ndigits &lt; v.ndigits)
		s= ndigits;
	else
		s= v.ndigits;

	Vector sum(s);   // sum enthaelt die addierten Vektoren

	for (int i = 0; i &lt; s; ++i)
		sum.digits[i] = digits[i] + v.digits[i];

	return (sum);
}

ostream&amp; operator&lt;&lt; (ostream&amp; strm, const Vector&amp; v)
{
   v.print(strm);
   return strm;
}
</code></pre>
<p>Hier hab ich ein problem, das programm läuft wenn ich</p>
<pre><code>digits = n.digits;
</code></pre>
<p>schreibe, damit hat mein prof aber ein problem, und wenn ich es ins kundenprogramm schreibe auch mein speicher <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title="=)"
      alt="🙂"
    /></p>
<p>ClientTime.cpp</p>
<p>/</p>
<pre><code>*ClientTime.cpp*/
#include &quot;Vector.h&quot;
#include &lt;time.h&gt;
#include &lt;iostream.h&gt;

int main()
{
	int runs = 4;			//Anzahl Durchlaufe
	int multi = 10;			// Multiplikatorwert fuer nexte Zuweisungen
	unsigned long zahl= 100000 ;	// Anfagswert der Zuweisungen
	double duration(unsigned long);
	cout &lt;&lt; &quot;Vectorzuweisung ohne Referenzzaehler:&quot; &lt;&lt; endl;	//Standardausgabe
	cout &lt;&lt; &quot;Anzahl der Messungen: &quot; &lt;&lt; runs &lt;&lt; endl &lt;&lt; endl;	//Standardausgabe

	while (runs--)
	{
		cout &lt;&lt; zahl &lt;&lt; &quot; Zuweisungen = &quot;&lt;&lt; duration(zahl) &lt;&lt; &quot; Sekunden&quot;;
		cout &lt;&lt; endl;
		zahl = zahl * multi;
	}

	return 0;
}

double duration(unsigned long MAX)
{
	clock_t start, finish;
	Vector a(10), b(5);

	start = clock();
	for (unsigned long i=0 ; i &lt; MAX ; i++)
		b = a;
	finish = clock();

	return (double)(finish-start)/CLOCKS_PER_SEC;
}
</code></pre>
<p>mir fällt echt nix ein, denn wenn ich es so laufen lasse, dann....</p>
<pre><code>Vector.cpp:24: warning: this decimal constant is unsigned only in ISO C90
Vector.cpp:94:6: warning: no newline at end of file
Vector.cpp: In member function ‘Vector Vector::operator+(const Vector&amp;) const’:
Vector.cpp:68: error: ‘n’ was not declared in this scope
Vector.cpp:68: error: assignment of data-member ‘Vector::digits’ in read-only structure
Vector.cpp:70: error: ‘a’ was not declared in this scope
Vector.cpp: At global scope:
Vector.cpp:73: error: expected unqualified-id before ‘if’
Vector.cpp:75: error: expected unqualified-id before ‘if’
Vector.cpp:77: error: expected unqualified-id before ‘else’
Vector.cpp:82: error: expected unqualified-id before ‘for’
Vector.cpp:82: error: expected constructor, destructor, or type conversion before ‘&lt;’ token
Vector.cpp:82: error: expected unqualified-id before ‘++’ token
Vector.cpp:85: error: expected unqualified-id before ‘return’
Vector.cpp:86: error: expected declaration before ‘}’ token
make: *** [Vector.o] Fehler 1
</code></pre>
<p>Kann mir da jemand weiterhelfen ?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/197997/problem-mit-speicherzuordnung</link><generator>RSS for Node</generator><lastBuildDate>Thu, 01 Oct 2026 19:36:28 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/197997.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 16 Nov 2007 18:51:01 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Speicherzuordnung on Fri, 16 Nov 2007 18:51:44 GMT]]></title><description><![CDATA[<p>HI, bin ganz neu hier und hab gleich mal ne Frage.</p>
<p>Habe ein Problem bei dem Programm zur Laufzeitmessung.<br />
Da ich mich mit c++ noch net so gut auskenne (habs im Studium erst seit 3 wochen) weis ich auch nicht was mir der Compiler damit sagen will.</p>
<p>hier mal der Code:</p>
<p>Vector.h</p>
<pre><code>#ifndef _VECTOR_H
#define _VECTOR_H
#include &lt;iostream.h&gt;

class Vector
{
public:
		// Verwaltungsmethoden
	Vector(const int=10);				// Konstruktor
   	Vector(const Vector&amp; n);			// Kopierkonstruktor
	Vector(int n, int a[]);				// Konstruktor
	Vector&amp; operator=(const Vector&amp; v);		// Zuweisung
	~Vector() {delete[] digits;}			// Destruktor

		// Nur-Lese Methoden

	int upper() const;				// Vectorl�ge
	void print(ostream&amp;) const;			// Ausgabe
	Vector operator+(const Vector&amp; v) const;	// Additionsoperator

		// �Aenderungsmethoden

	int&amp; operator[](const int i);			// Zuweisung

private:
							// Datenelemente und interne Methoden
   int* digits;              				// Zeiger auf das Ziffernfeld 
   unsigned ndigits;          				// Anzahl der Ziffern
};

ostream&amp; operator&lt;&lt; (ostream&amp;, const Vector&amp;);

#endif
</code></pre>
<p>Vector.cpp</p>
<pre><code>#include &lt;iostream.h&gt;
#include &quot;Vector.h&quot;

Vector::Vector(const Vector&amp; n)		// Standartkopierkonstruktor
{
	ndigits=n.ndigits;
	digits= new int [ndigits];
	for (unsigned i=0 ; i&lt; ndigits ; i++)
	    digits[i]=n.digits[i];
}

Vector::Vector(const int n)// Konstruktor (Objekt Feld bereitstellen)
{

	ndigits = n;
	digits = new int[ndigits];// Speicher reservieren
	for (unsigned i=0 ; i&lt;ndigits ; i++)
		digits[i]=0;
}

int&amp; Vector::operator[](const int i)// Methode fuer Benutzung von []
{
	if (2147483647 &lt; i &gt; -2147483648)
	{
		cout &lt;&lt; &quot;Wertebereich ueberschritten...Wert auf 10 gesetzt&quot; &lt;&lt; endl;
		return (digits[10]);
	}
	return (digits[i]);// Referenz auf int Wert des angeforderten Elementes
}

int Vector::upper() const	// bestimmt die Vectorlaenge
{
	return ndigits;
}

void Vector::print(ostream&amp; strm) const	// Ausgabemethode fuer alle Objekte
{					// vom Typ der KLasse Vector
	for (unsigned i=0 ; i&lt;ndigits ; i++)
		strm &lt;&lt; digits[i] &lt;&lt; ' ';

	strm &lt;&lt; endl;
}

Vector::Vector(int n, int a[])		// Konstruktor (Laenge und Feld)
{
	digits = new int[ndigits = n];
	for (unsigned i=0 ; i&lt;ndigits ; i++)
		digits[i] = a[i];
}

Vector&amp; Vector::operator=(const Vector&amp; n) // Zuweisungsoperator
{
   if (&amp;n != this)                 // c = c wenn &amp;n == this
   {
      delete[] digits;             // Loeschen im Zielobjekt
      unsigned i = n.ndigits;
      digits = new int[ndigits=i];// dyn.Speicherplatz fuer
      int* p = digits;            // Zeiger im Zielobjekt
      const int* q = n.digits;    // Zeiger im Quellobjekt
      while (i--)  *p++ = *q++;    // Kopieren von 
   } 
   return *this;
}

Vector Vector::operator+(const Vector&amp; v) const// Additionskonstuktor
{digits = new int[ndigits = n];
	for (unsigned i=0 ; i&lt;ndigits ; i++)
		digits[i] = a[i];
}
	int s;
	if (ndigits!=v.ndigits)
		cout &lt;&lt; &quot;Die zu addierenden Vektoren sind unterschiedlich lang&quot; &lt;&lt; endl;
	if (ndigits &lt; v.ndigits)
		s= ndigits;
	else
		s= v.ndigits;

	Vector sum(s);   // sum enthaelt die addierten Vektoren

	for (int i = 0; i &lt; s; ++i)
		sum.digits[i] = digits[i] + v.digits[i];

	return (sum);
}

ostream&amp; operator&lt;&lt; (ostream&amp; strm, const Vector&amp; v)
{
   v.print(strm);
   return strm;
}
</code></pre>
<p>Hier hab ich ein problem, das programm läuft wenn ich</p>
<pre><code>digits = n.digits;
</code></pre>
<p>schreibe, damit hat mein prof aber ein problem, und wenn ich es ins kundenprogramm schreibe auch mein speicher <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title="=)"
      alt="🙂"
    /></p>
<p>ClientTime.cpp</p>
<p>/</p>
<pre><code>*ClientTime.cpp*/
#include &quot;Vector.h&quot;
#include &lt;time.h&gt;
#include &lt;iostream.h&gt;

int main()
{
	int runs = 4;			//Anzahl Durchlaufe
	int multi = 10;			// Multiplikatorwert fuer nexte Zuweisungen
	unsigned long zahl= 100000 ;	// Anfagswert der Zuweisungen
	double duration(unsigned long);
	cout &lt;&lt; &quot;Vectorzuweisung ohne Referenzzaehler:&quot; &lt;&lt; endl;	//Standardausgabe
	cout &lt;&lt; &quot;Anzahl der Messungen: &quot; &lt;&lt; runs &lt;&lt; endl &lt;&lt; endl;	//Standardausgabe

	while (runs--)
	{
		cout &lt;&lt; zahl &lt;&lt; &quot; Zuweisungen = &quot;&lt;&lt; duration(zahl) &lt;&lt; &quot; Sekunden&quot;;
		cout &lt;&lt; endl;
		zahl = zahl * multi;
	}

	return 0;
}

double duration(unsigned long MAX)
{
	clock_t start, finish;
	Vector a(10), b(5);

	start = clock();
	for (unsigned long i=0 ; i &lt; MAX ; i++)
		b = a;
	finish = clock();

	return (double)(finish-start)/CLOCKS_PER_SEC;
}
</code></pre>
<p>mir fällt echt nix ein, denn wenn ich es so laufen lasse, dann....</p>
<pre><code>Vector.cpp:24: warning: this decimal constant is unsigned only in ISO C90
Vector.cpp:94:6: warning: no newline at end of file
Vector.cpp: In member function ‘Vector Vector::operator+(const Vector&amp;) const’:
Vector.cpp:68: error: ‘n’ was not declared in this scope
Vector.cpp:68: error: assignment of data-member ‘Vector::digits’ in read-only structure
Vector.cpp:70: error: ‘a’ was not declared in this scope
Vector.cpp: At global scope:
Vector.cpp:73: error: expected unqualified-id before ‘if’
Vector.cpp:75: error: expected unqualified-id before ‘if’
Vector.cpp:77: error: expected unqualified-id before ‘else’
Vector.cpp:82: error: expected unqualified-id before ‘for’
Vector.cpp:82: error: expected constructor, destructor, or type conversion before ‘&lt;’ token
Vector.cpp:82: error: expected unqualified-id before ‘++’ token
Vector.cpp:85: error: expected unqualified-id before ‘return’
Vector.cpp:86: error: expected declaration before ‘}’ token
make: *** [Vector.o] Fehler 1
</code></pre>
<p>Kann mir da jemand weiterhelfen ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1404624</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1404624</guid><dc:creator><![CDATA[cppanfaenger]]></dc:creator><pubDate>Fri, 16 Nov 2007 18:51:44 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Speicherzuordnung on Sat, 17 Nov 2007 10:50:49 GMT]]></title><description><![CDATA[<p>Hoppala aus welcher Sprache kommst du denn? Das kann man so nicht in C++ machen ^^</p>
<p>Naja also nen Großteil der Fehlermeldungen resultiert aus der folgenden Stelle:</p>
<pre><code class="language-cpp">Vector Vector::operator+(const Vector&amp; v) const// Additionskonstuktor
{digits = new int[ndigits = n];
    for (unsigned i=0 ; i&lt;ndigits ; i++)
        digits[i] = a[i];
}
</code></pre>
<p>... du schließt den Scope ... das ist aber an der Stelle falsch <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_tongue"
      title=":P"
      alt="😛"
    /> Also muss die letzte '}' da weg!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1404833</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1404833</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sat, 17 Nov 2007 10:50:49 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Speicherzuordnung on Sat, 17 Nov 2007 10:59:00 GMT]]></title><description><![CDATA[<p>Aja und:</p>
<pre><code class="language-cpp">#include &quot;Vector.h&quot;
#include &lt;ctime&gt;
#include &lt;iostream&gt;

double duration(unsigned long); // In den global-Scope :P Lokale Funktionsdeklarationen sind nicht erlaubt :P

int main()
{
    const unsigned int multi(10);
    unsigned long zahl(100000L);

    std::cout &lt;&lt; &quot;Vectorzuweisung ohne Referenzzaehler:&quot; &lt;&lt; std::endl;    

    for (unsigned int rum(4); rum; --run)
    {
        std::cout &lt;&lt; zahl &lt;&lt; &quot; Zuweisungen = &quot;&lt;&lt; duration(zahl) &lt;&lt; &quot; Sekunden&quot; &lt;&lt; std::endl;
        zahl *= multi;
    }
}

double duration(unsigned long MAX)
{
    const std::clock_t start(std::clock())

    Vector a(10), b(5);
    for (unsigned long i(0); i &lt; MAX; ++i)
        b = a;

    return static_cast&lt;double&gt;((std::clock() - start) / CLOCKS_PER_SEC);
}
</code></pre>
<p>... wobei das so nicht wirklich soo viel Sinn hat, was du da machst <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1404836</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1404836</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sat, 17 Nov 2007 10:59:00 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Speicherzuordnung on Sat, 17 Nov 2007 11:47:50 GMT]]></title><description><![CDATA[<p>(D)Evil schrieb:</p>
<blockquote>
<p>Lokale Funktionsdeklarationen sind nicht erlaubt</p>
</blockquote>
<p>Unsinn.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1404869</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1404869</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 17 Nov 2007 11:47:50 GMT</pubDate></item></channel></rss>