Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » C++ Konstruktor

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
22.07.2018, 16:12 Uhr
ao

(Operator)


Du machst immer new Rectangle mit der doppelten Größe, egal ob du das später brauchst oder nicht. In den Fällen, in denen du das nicht brauchst, machst du kein delete - massives Speicherleck.

Am Ende machst du noch eine nutzlose Zuweisung an m_newSize.

Würdest du sagen, das "passt"?

Wie arbeitest du eigentlich? Machst du dir irgendeinen Plan? Oder hackst du einfach drauflos?

Und in was für einer Art Kurs sind wir hier? Wirst du Informatiker? Ingenieur? Lehrer womöglich?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
22.07.2018, 16:43 Uhr
Power33



Habe nur ein Fach informatik im Mathe Studium
Description Resource Path Location Type
Symbol 'm_newSize' could not be resolved CDrawing.cpp /Rectangle line 54 Semantic Error
Symbol 'm_newSize' could not be resolved CDrawing.cpp /Rectangle line 58 Semantic Error
use of undeclared identifier 'm_newSize' CDrawing.cpp /Rectangle line 54 C/C++ Problem
use of undeclared identifier 'm_newSize' CDrawing.cpp /Rectangle line 58 C/C++ Problem
make: *** [CDrawing.o] Error 1 Rectangle C/C++ Problem
in-class initialization of non-static data member is a C++11 extension [-Wc++11-extensions] CDrawing.h /Rectangle line 17 C/C++ Problem

Das sind die Fehler ,wenn . ich den doppelten Speicher anlege in der if Bedingung



C++:

void CDrawing::add(const CRectangle& rectangle){


if(m_nextFree == m_arraySize ){
    int m_newSize = m_arraySize*2;
        CRectangle* newRectangle = new CRectangle [ m_newSize];
    for(int i = 0; i<(m_newSize);i++){

        newRectangle[i] = m_rectangles[i];
    }

    delete[] m_rectangles;
    m_rectangles = newRectangle;

    m_arraySize = m_newSize;

}
     m_rectangles[m_nextFree] = rectangle;
     m_nextFree++;

if(m_arraySize < 100){

    m_newSize = m_arraySize*2;
}

else{
        m_newSize = m_arraySize+100;
     }
}



 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
012
22.07.2018, 17:56 Uhr
ao

(Operator)


m_newSize wird innerhalb des if-Blocks deklariert und ist deshalb außerhalb nicht existent. Dass du es trotzdem verwendest, führt zu den genannten Fehlermeldungen.

Denk mal nach: Was ist das denn überhaupt für eine Fallunterscheidung, if (m_arraySize < 100) ....? Wozu soll die dienen? Und kann die das an der Stelle überhaupt noch, wo das new CRectangle schon längst gelaufen ist?

"Habe nur ein Fach informatik im Mathe Studium"
Also mal wieder ein Fall von "gutbezahlter Dozent im öffentlichen Dienst bringt Studenten olle Kamellen bei". Willkommen im Technologieland Deutschland, wo Weiterbildung immer nur was für die anderen ist.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
22.07.2018, 18:17 Uhr
Power33



f (m_arraySize < 100) ....? Wozu soll die dienen?

Ich will gucken ob das Array weniger als 100 Elemente hat und dann will ich die Array Grösse verdoppeln.
Wie sonst ?

Das könnte ich auch in die if bedingung einbauen ,aber wäre es dann korrekt?
Vorhin meintest du ,dass würde nicht passen
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
22.07.2018, 19:52 Uhr
ao

(Operator)


So wie es jetzt ist, passt es nicht. Es gehört natürlich anders.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
23.07.2018, 08:59 Uhr
ao

(Operator)



Zitat von Power33:
f (m_arraySize < 100) ....? Wozu soll die dienen?

Ich will gucken ob das Array weniger als 100 Elemente hat und dann will ich die Array Grösse verdoppeln.
Wie sonst ?

Danke, MIR ist schon klar, wozu das dienen soll. Meine Fragen sollten Denkanstöße für dich sein. Du sollst mal sorgfältiger planen, was die add()-Methode machen soll, in welchen Schritten hintereinander.

Es ist nämlich eigentlich einleuchtend, dass man das richtige newSize braucht, bevor man new Rectangle macht, und nicht hinterher. Oder?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: