C++ Libraries und Probleme mit ihnen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • C++ Libraries und Probleme mit ihnen

    So, liebe Community :D
    Wir arbeiten in Ainf (=Angewandte Informatik) mit einem Uralt Borland C++ Compiler und dem wahrscheinlich noch älteren Editor "Jens File Editor". Wenn ich zu Hause was in C++ progge benutze ich eigentlich aus überzeugung Dev C++, aber auch der Lehrer ist überzeugt davon, dass wir es so besser lernen. Wie auch immer. Auf jeden Fall hab ich Probleme mit dem Borland Compiler, zb. nimmt er aus irgendeinen Grund den ich nicht kenne keine Variablen in Arrays an (Dev C++ hat dabei keinerlei Probleme),
    Ich schreibe zb. das hier:

    GML-Quellcode

    1. int feldgr=3;
    2. int feld[feldgr][feldgr];

    Und rauskommt dieser Error:

    MAKE Version 5.2 Copyright (c) 1987, 2000 Borland
    Error E2313 .\tictacto.cpp 11: Constant expression required in function main()
    *** 1 errors in Compile ***

    Das ist die eine Sache, die andere ist, dass er irgendwie beim Borland die Felder überschreibt. Ich hab zb. 2 Felder und wenn ich in einem was ändere, dann ändert das auch was im anderen. Logischer Weise immer das Letzte Glied des Feldes (das wie es aussieht immer das erste ist...). Wenn ich nämlich haargenau das selbe (ausgenommen void main) in Dev C++ übernehme, dann funktioniert das prima.

    Und außerdem würds mich mal interessieren, welche include dateien ich brauche bei dev c++, wenn ich bei Borland conio.h und iomanip.h benutze. So sachen wie clrscr() funken dann nämlich nicht mehr bei Dev C++.

    Vielleicht wisst ja ihr an was das liegt...bis ich unseren Lehrer dazu kriege eine Antwort zu kriegen... :para:
    PULSE

    Zweispieler [||||||||||]
    Einspieler [||||||||||]

    [Die Entgrater ist auf Eis gelegt]
  • Probier mal

    GML-Quellcode

    1. const int feldgr=3;
    2. int feld[feldgr][feldgr];
    In meiner psychisch soziologischen Konstellation, manifestiert sich die absolute Dominanz positiver Impressionen meines Individuums.
    Kurz: Ich bin geil!

  • Dann wär die Sache mal erledigt, danke Lunar...
    Aber warum er überschreibt check ich immer noch nicht :vogel:
    Edit: Das ergibt doch alles keinen Sinn, bis jetzt nach dem ich const verwende funkt alles...Aber mal schaun...so einfach kann es doch gar nicht sein?!

    Und nochmal Edit:
    Tja, zu früh gefreut...
    Wenn ich das mache:

    GML-Quellcode

    1. const int feldgr;
    2. cout<<"Bitte geben sie die Groesse des Feldes ein: ";
    3. cin>>feldgr;


    kommt das raus:
    Error E2304 .\tictacto.cpp 10: Constant variable 'feldgr' must be initialized in function main()
    Error E2094 .\tictacto.cpp 12: 'operator>>' not implemented in type 'istream' for arguments of type 'int' in function main()
    Error E2313 .\tictacto.cpp 13: Constant expression required in function main()
    Error E2313 .\tictacto.cpp 14: Constant expression required in function main()
    Error E2313 .\tictacto.cpp 14: Constant expression required in function main()
    *** 5 errors in Compile ***
    PULSE

    Zweispieler [||||||||||]
    Einspieler [||||||||||]

    [Die Entgrater ist auf Eis gelegt]
  • Dir ist klar, dass eine Konstante nicht überschrieben werden kann... Try this:

    GML-Quellcode

    1. int feldinput;
    2. cout<<"Bitte geben sie die Groesse des Feldes ein: ";
    3. cin>>feldinput;
    4. const int feldgr = (const)feldinput;
    In meiner psychisch soziologischen Konstellation, manifestiert sich die absolute Dominanz positiver Impressionen meines Individuums.
    Kurz: Ich bin geil!

  • Das hatt ich auch schon versucht, aber es funzt logischerweise auch nicht...ob ich jetz einer konstante den cout wert zuweise oder der einer variable ist wie es aussieht egal...
    PULSE

    Zweispieler [||||||||||]
    Einspieler [||||||||||]

    [Die Entgrater ist auf Eis gelegt]
  • int feldinput;
    cout<<"Bitte geben sie die Groesse des Feldes ein: ";
    cin>>feldinput;
    const int feldgr = (const)feldinput;

    müsse es nicht "(const int) feldinput" sein?

    Und einen Array, bei dem man die genau Initialisierungsgrösse zu Kompillierungszeit noch nicht kennt, benutzt man idR. einen Pointer:

    int var = 10;
    int * array = new int[var];

    array[0] = 10;

    edit:
    in dem fall "delete array" am Schluss nicht vergessen! =D
    "das war meine letzte flamewar PM an dich ."
  • Danke, schon wieder was dazu gelernt :thumbsup:
    Edit: Ok, ich könnt das jetz zwar so schreiben, aber es wäre eine kleine Erklärung dazu doch sehr nett. Da ich mir nichts wirkliches drunter vorstellen kann 8|
    PULSE

    Zweispieler [||||||||||]
    Einspieler [||||||||||]

    [Die Entgrater ist auf Eis gelegt]

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Trompadon ()

  • Ich entschuldige mich offiziel für diesen geistlosen Post :P
    Ich soll Google benutzen, bevor ich andere damit beauftrage google zu benutzen.
    Ich soll Google benutzen, bevor ich andere damit beauftrage google zu benutzen.
    Ich soll Google benutzen, bevor ich andere damit beauftrage google zu benutzen.
    PULSE

    Zweispieler [||||||||||]
    Einspieler [||||||||||]

    [Die Entgrater ist auf Eis gelegt]
  • Aber schau dir davor erstmal Referenzen an : tutorial.schornboeck.net/referenzen.htm ^^
    Zeiger(Pointer) sind ein sehr wichtiges aber auch schwer zu verstehendes Thema...

    Prinzipiell gibts 2 Arten von Speicherallokierung bei C++:
    Die eine, wie du sie wohl bisher immer angewandt hast, ist über den Stack(Stapel).
    Initialisierst du ne Variable zb mit "int a;", dann wird a auf dem Stack angelegt und auch entsprechend Speicher.
    Verlässt a seinen Gültigkeitsbereich, wird es wieder vom Stack weggenommen(und damit gelöscht).
    Bsp:
    void main()
    { //gültigkeitsbereich 1

    int a; //a wird im stack angelegt, befindet sich im gültkeitsbereicht "1"

    } //hier endet der gültigkeitsbereich 1 und a wird wieder vom stack weggenommen, der Speicher wird freigelassen

    Nun gibt es den Heap, den dynamischen Speicher.
    Mit diesem kannst du darüber entscheiden, wann Speicher wie gross angelegt werden soll und wann er wieder gelöscht werden soll.
    Das ist gefährlich, da du evtl vergisst, den angelegten Speicher auch wieder freizugeben...
    Prinzipiell allokierst du dynamischen Speicher so(und weist einen Zeiger auf die Adresse des allokierten Speichers):
    Typ *pointername = new Typ;
    Und zugreifen kannst du auf den wert so:
    *pointername = wert;
    Und löschen(nie vergessen!) geht so:
    delete pointername;
    Ich geh nicht weiter drauf ein, weil du das noch früh genug lernen wirst und im Moment auch wohl noch gar nicht brauchen und damit wahrscheinlich auch nicht verstehen wirst.
    "das war meine letzte flamewar PM an dich ."