<?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[ISO C++ forbids assignment of arrays ???]]></title><description><![CDATA[<p>Tach</p>
<p>Wir müssen nun zum Semesterabschluss in Informatik als Maschinenbauer ein Programm schreiben (bis diesen Freitag...wenn also einer eine Dose mitleid hat...) mit dem man eine Bundesligaliste aus einer Datei auslesen, sortiert angucken, editieren (Spiel eingeben) und wieder in eine Datei abspeichern kann. Wir ihr euch sicher denken könnte, klappt der Scheiß aber bei mir nicht, und zwar kommt obengenannter Fehler in folgendem Quelltextschnipsel vor, in den Zeilen nach dem &quot;if&quot;:</p>
<pre><code class="language-cpp">struct vereinsliste
{
       char name[18][256],punkte[18][256],tore[18][256],mtore[18][256];
       int zpunkte[18], ztore[18], zmtore[18];
};

struct zeile
{
       char aname[256],apunkte[256],atore[256],amtore[256];
       int azpunkte, aztore, azmtore;
};

bool operator &lt; (const zeile &amp;v1 , const zeile &amp;v2)
{
     int c,diff1, diff2;
     if (v2.azpunkte&gt;v1.azpunkte) return false;
     diff1=(v1.aztore-v1.azmtore);
     diff2=(v2.aztore-v2.azmtore);
     if (diff2&gt;diff1) return false;
     if (v2.atore&gt;v2.atore) return false;
     if ( c = strcmp(v1.aname,v2.aname)) return (c&lt;0)?true:false;
}

void sortieren(vereinsliste &amp;vliste)
{
     int i=0,k=0;
     zeile puffer;
     while (i&lt;18)
     {
           k=i+1;
           while (k&lt;18)
           {

                 if ((vliste[i])&lt;(vliste2[i]))
                 {

                     puffer=vliste[i];
                     vliste[i]=vliste[k];
                     vliste[k]=puffer;

                      }
                 k++;
           }
           i++;
     }
}
</code></pre>
<p>Jetzt versteh ich nich, warum man keine Arrays kopieren kann. In einem früheren Programm mussten wir matritzenmultiplikationen programmieren, und da konnte man auch Float-Arrays einer Variable in eine andere Variable gleichen Typs kopieren. nun dachte ich, dass es vielleicht daran liegt, dass &quot;puffer&quot; vom Typ struct zeile ist und vliste vom Typ struct Vereinsliste und habe mal gleiche Typen draus gemacht und folgendes geschrieben: puffer[1]=vliste[1];<br />
das ging auch nicht.<br />
Liegt das nun daran, dass ich Zeiger und Speicheradressen und so von den char-arrays durcheinandermehre?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/171409/iso-c-forbids-assignment-of-arrays</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 11:55:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/171409.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 25 Jan 2007 09:19:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ISO C++ forbids assignment of arrays ??? on Thu, 25 Jan 2007 09:27:25 GMT]]></title><description><![CDATA[<p>Tach</p>
<p>Wir müssen nun zum Semesterabschluss in Informatik als Maschinenbauer ein Programm schreiben (bis diesen Freitag...wenn also einer eine Dose mitleid hat...) mit dem man eine Bundesligaliste aus einer Datei auslesen, sortiert angucken, editieren (Spiel eingeben) und wieder in eine Datei abspeichern kann. Wir ihr euch sicher denken könnte, klappt der Scheiß aber bei mir nicht, und zwar kommt obengenannter Fehler in folgendem Quelltextschnipsel vor, in den Zeilen nach dem &quot;if&quot;:</p>
<pre><code class="language-cpp">struct vereinsliste
{
       char name[18][256],punkte[18][256],tore[18][256],mtore[18][256];
       int zpunkte[18], ztore[18], zmtore[18];
};

struct zeile
{
       char aname[256],apunkte[256],atore[256],amtore[256];
       int azpunkte, aztore, azmtore;
};

bool operator &lt; (const zeile &amp;v1 , const zeile &amp;v2)
{
     int c,diff1, diff2;
     if (v2.azpunkte&gt;v1.azpunkte) return false;
     diff1=(v1.aztore-v1.azmtore);
     diff2=(v2.aztore-v2.azmtore);
     if (diff2&gt;diff1) return false;
     if (v2.atore&gt;v2.atore) return false;
     if ( c = strcmp(v1.aname,v2.aname)) return (c&lt;0)?true:false;
}

void sortieren(vereinsliste &amp;vliste)
{
     int i=0,k=0;
     zeile puffer;
     while (i&lt;18)
     {
           k=i+1;
           while (k&lt;18)
           {

                 if ((vliste[i])&lt;(vliste2[i]))
                 {

                     puffer=vliste[i];
                     vliste[i]=vliste[k];
                     vliste[k]=puffer;

                      }
                 k++;
           }
           i++;
     }
}
</code></pre>
<p>Jetzt versteh ich nich, warum man keine Arrays kopieren kann. In einem früheren Programm mussten wir matritzenmultiplikationen programmieren, und da konnte man auch Float-Arrays einer Variable in eine andere Variable gleichen Typs kopieren. nun dachte ich, dass es vielleicht daran liegt, dass &quot;puffer&quot; vom Typ struct zeile ist und vliste vom Typ struct Vereinsliste und habe mal gleiche Typen draus gemacht und folgendes geschrieben: puffer[1]=vliste[1];<br />
das ging auch nicht.<br />
Liegt das nun daran, dass ich Zeiger und Speicheradressen und so von den char-arrays durcheinandermehre?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1216651</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1216651</guid><dc:creator><![CDATA[rostbratwurst]]></dc:creator><pubDate>Thu, 25 Jan 2007 09:27:25 GMT</pubDate></item><item><title><![CDATA[Reply to ISO C++ forbids assignment of arrays ??? on Thu, 25 Jan 2007 13:27:17 GMT]]></title><description><![CDATA[<p>Hab wohl das gleiche Problem: Wie initiert (definiert?) man eine statische Variable?</p>
<p>Habs an vielen Stellen auf viele Weisen versucht, aber zuletzt kriege ich vom Linker viele Fehlermeldungen von den Programmstellen, die Bezug auf ein statische Variable nehmen: &quot;undefinied reference to &lt;variable&gt;&quot;.</p>
<pre><code>class Bsp {
  static int count;
public:
  static void initClass() {count=0;}
         void doSomething() {..; count++;} 
};

int main (int argc, char** argv) { 
  Bsp::initClass();
  Bsp A;
  A.doSomething();
}
</code></pre>
<p>Vielen Dank für Hilfe im vorraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1216845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1216845</guid><dc:creator><![CDATA[gorgoyle]]></dc:creator><pubDate>Thu, 25 Jan 2007 13:27:17 GMT</pubDate></item><item><title><![CDATA[Reply to ISO C++ forbids assignment of arrays ??? on Thu, 25 Jan 2007 13:42:48 GMT]]></title><description><![CDATA[<p>@Bratwurst: Arrays können nicht so einfach per = einander zugewiesen werden (structs, die ein Array enthalten, interessanterweise schon). Da mußt du vermutlich jedes Element einzeln einander zuweisen (alternativ geht auch memcpy() oder std::copy()). Oder du überdenkst nochmal dein Design - in deinem Beispiel könntest du die vielen einzelnen Arrays in der vereinsliste-Klasse zusammenfassen zu einem einzigen <code>zeile daten[18];</code> .</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/14585">@gorgoyle</a>: Eine statische Klassenvariable muß noch gesondert definiert werden (die Nennung in der Klassendefinition gilt nur als Deklaration):</p>
<pre><code class="language-cpp">class Bsp
{
  static int count;
public:
  ...
};

int Bsp::count;//Hier ist die Definition - optional kannst du die Variable hier auch initialisieren
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1216856</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1216856</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 25 Jan 2007 13:42:48 GMT</pubDate></item><item><title><![CDATA[Reply to ISO C++ forbids assignment of arrays ??? on Thu, 25 Jan 2007 13:51:09 GMT]]></title><description><![CDATA[<p>Nein, du ahst ein ganz anderes Problem, aber gehen wir mal der Reihe nach vor.</p>
<p>Rostbratwurst: Was du dort versuchst ist sowieso ziemlicher Blödsinn, gelinde gesagt.<br />
Du versuchst eine Struktur als Array zu reinterpretieren. Was du machen kannst ist folgendes:</p>
<pre><code class="language-cpp">struct zeile
{
       char aname[256],apunkte[256],atore[256],amtore[256];
       int azpunkte, aztore, azmtore;
};

bool operator &lt; (const zeile &amp;v1 , const zeile &amp;v2)
{
     int c,diff1, diff2;
     if (v2.azpunkte&gt;v1.azpunkte) return false;
     diff1=(v1.aztore-v1.azmtore);
     diff2=(v2.aztore-v2.azmtore);
     if (diff2&gt;diff1) return false;
     if (v2.atore&gt;v2.atore) return false;
     if ( c = strcmp(v1.aname,v2.aname)) return (c&lt;0)?true:false;
}

void sortieren(zeile *vliste)
{
  int i=0,k=0;
  zeile* puffer;
  while (i&lt;18)
  {
    k=i+1;
    while (k&lt;18)
    {
      if ((*vliste[i])&lt;(*vliste2[i])) //was du hiermit bezweckst musst du allerdings selber hinbiegen :p
      {
        puffer = vliste[i];
        vliste[i] = vliste[k];
        vliste[k] = puffer;

      }
      k++;
    }
    i++;
  }
}

int main()
{
  zeile* vereine;
  vereine = new zeile[18];
  sortieren(vereine);
}
</code></pre>
<p>Ich hab ehrlich gesagt keine Ahnung, woher das vliste2 kommen soll :o</p>
<p>gorgoyle:<br />
Statische Variablen werden zur Compilezeit außerhalb der Klassendeklaration definiert. Sprich:</p>
<pre><code class="language-cpp">class Foo
{
  static int bar;
};

int Foo::bar = 0;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1216860</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1216860</guid><dc:creator><![CDATA[viande]]></dc:creator><pubDate>Thu, 25 Jan 2007 13:51:09 GMT</pubDate></item><item><title><![CDATA[Reply to ISO C++ forbids assignment of arrays ??? on Thu, 25 Jan 2007 15:47:37 GMT]]></title><description><![CDATA[<p>Wenn ich die Variable unterhalb der Klasse definiere weint mir der Compiler etwas von &quot;multiple definitions&quot; vor, wenn ich es unterlasse, daß sie garnicht definiert wurde .. hüh oder hott?</p>
<p>Ich hab vll. ein unterschiedliches Verständnis von den Begriffen:<br />
Declaration: Erklären: &lt;name&gt; ist eine Variable vom Type type<br />
Definition: Zuweisen: a=b;<br />
Initialization: Erstmalige Definition eines Anfangszustandes a=0;<br />
Liege ich da richtig?</p>
<p>Die problematischen statischen Variablen sind allesamt Primitive, also bool, int und char*.</p>
<p>/*edit*/ Ich mußte die Declaration im cpp-File untebringen, weil sonst .. multiple Declarose</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1216896</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1216896</guid><dc:creator><![CDATA[gorgoyle]]></dc:creator><pubDate>Thu, 25 Jan 2007 15:47:37 GMT</pubDate></item><item><title><![CDATA[Reply to ISO C++ forbids assignment of arrays ??? on Thu, 25 Jan 2007 15:36:39 GMT]]></title><description><![CDATA[<p>Declaration: Erklären dass es eine Variable/Funktion/Klasse/Methode gibt.<br />
Definition: Erstellen der Variable/Funktion/Methode.<br />
Initialization: Zuweisung eines Wertes bei Definition.<br />
Assignment: Zuweisung eines Wertes nach Definition/Initialization.</p>
<blockquote>
<p>/*edit*/ Ich mußte die Declaration im cpp-File untebringen, weil sonst .. multiple Declarose</p>
</blockquote>
<p>Korrekt. Denn eine Definition darf nur einmal im gesamten Programm vorkommen. Eine Deklaration muss hingegen in jeder Übersetzungseinheit (grob: cpp-File, meist über include eines h-File) wo die Variable/... benutzt wird vorkommen. Mit der Deklaration (in der Klasse) sagst Du dem Compiler &quot;es gibt sie&quot;, mit der Definition sagst Du gewissermassen &quot;und in dieser Übersetzungseinheit ist der Speicher dafür&quot;.</p>
<p>BTW: Thread kapern und Thema wechseln ist nicht nett <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/1216979</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1216979</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 25 Jan 2007 15:36:39 GMT</pubDate></item><item><title><![CDATA[Reply to ISO C++ forbids assignment of arrays ??? on Thu, 25 Jan 2007 15:51:02 GMT]]></title><description><![CDATA[<p>Sorry MyLord! Ich dachte mein Problem wäre &quot;Thread&quot;-Konform und wollte keinen weiteren aufmachen <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1217000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1217000</guid><dc:creator><![CDATA[gorgoyle]]></dc:creator><pubDate>Thu, 25 Jan 2007 15:51:02 GMT</pubDate></item><item><title><![CDATA[Reply to ISO C++ forbids assignment of arrays ??? on Thu, 25 Jan 2007 19:47:00 GMT]]></title><description><![CDATA[<p>Jo Leude vielen Dank für eure Hilfe!!!</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/8183">@viande</a>: das vliste2 is auch ein Fehler von mir, das war dann die Dummheit, die mich um Mitternacht übermannte. Das soll natürlich auch vliste1 heißen. Das mit dem vliste1[i]&lt;vliste1[k] ham wir so ähnlich in der Vorlesung gehabt, und laut unserm Dr. Professor soll das auch funzen, habs auch in den Programmen der Komilitonen gesehn.</p>
<p>Wenn ich das jetz richtig verstanden hab, könnte ich eine komplette variable struct mit vielen Arrays in eine andere variable vom selben Typ kopieren, aber die einzelnen Arrays nich? Hm. Ich glaub ich hab aber eine Idee, wie ich es vielleicht auch anders machen könnte. Hoffentlich klappt das bis morgen. Wenn nicht...inzwischen hab ich eh genug Punkte zusammen um zu bestehen, aber das sollte ja eigentlich nicht das Ziel sein. Und mein Stil is sowas überhaupt nicht.</p>
<p>Nochmals danke an euch. Ich probier das vom viande gleich mal aus!</p>
<p>update: Ich habs so 1:1 vom Viande übernommen und nu meckert der bei der if-Bedingung wieder rum (no match for 'operator*' in '**((+(((unsigned int)i) * 1036u)) + vliste)' .<br />
Ich will einfach die beiden zeilen (vliste1[i] und vliste1[k] ) übergeben, und der soll dann je nach kriterium da true oder false zurückgeben. Vielleicht geht das ja, wenn ich die einzelnen elemente immer vergleiche. Wird sicher einfacher sein. Hoff ich mal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1217124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1217124</guid><dc:creator><![CDATA[rostbratwurst]]></dc:creator><pubDate>Thu, 25 Jan 2007 19:47:00 GMT</pubDate></item></channel></rss>