[c++] Product uit array verwijderen

Pagina: 1
Acties:
  • 52 views sinds 30-01-2008

  • Drazzic
  • Registratie: Juni 2001
  • Laatst online: 11-03-2025
Ik heb een array gevuld met allemaal producten opgebouwd uit het volgende

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#define max 100

typedef struct TProducttag
        {
        AnsiString naam;        //array voor de naam.
        AnsiString code;        //array voor de code.
        int voorraad;           //array voor de voorraad.
        float inkoopprijs;         //array voor de inkoopprijs.
        float verkoopprijs;        //array voor de verkoopprijs.
        AnsiString aanbieding;        //array voor de aanbieding.       bool
        String categorie;       //array voor de categorie.
        int vervanger;          //array voor het aantal vervangers.
        String vervangers[4];   //array voor de vervangers.
        }Tproduct;


Maar nu wil ik dat als ik de code van het product invul en op de verwijder knop dat deze uit de array wordt verwijderd nu had ik het zo gedaan"

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
void __fastcall TForm1::VerwijderClick(TObject *Sender)
//Pre:      De knop Verwijder is ingedrukt en de ingevulde artikelcode bestaat
//Post:     Verwijder de gegevens uit de array
//Makers:   Bas van Dijk        Datum: 31-05-2004   Klas:  E2E
{
int j,aantal;

j = 0;
aantal = units;

while(((product[j].code)!=(code->Text))&&(j<=aantal))    //Controleren of de ingevulde code voorkomt
        {
        j++;
        }
aantal++;

if (j==(aantal))        //Als hij niet voorkomt foutmelding geven.
        {
        ShowMessage ("Code komt niet voor! U kunt dit product niet verwijderen");
        }
else    //Het product bestaat verwijder hem uit de array.
        {
        delete [] product[j].naam;
        delete [] product[j].code;
        delete [] product[j].voorraad;
        delete [] product[j].inkoopprijs;
        delete [] product[j].verkoopprijs;
        delete [] product[j].aanbieding;
        delete [] product[j].categorie;
        delete [] product[j].vervanger;
        delete [] product[j].vervangers[0];
        delete [] product[j].vervangers[1];
        delete [] product[j].vervangers[2];
        delete [] product[j].vervangers[3];
        ShowMessage ("Het product is verwijderd");
        }
}


Ik heb die delete [] uit een ander topic hier maar schijnbaar werkt dat dus niet. Welke code moet ik gebruiken om wel zoiets te kunnen verwijderen?

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:53
Met delete geef je geheugen vrij, maar verwijder je geen item uit een array.

Als je echt arrays wilt gebruiken, dan zal je moeten gaan verschuiven ofzo.
Maar, ik zie dat je C++ Builder gebruikt; waarom maak je dan geen gebruik van de collection-classes die beschikbaar zijn in de VCL ? TObjectList bv.

https://fgheysels.github.io/


  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 16:54

Reptile209

- gers -

Als je de code stept met je debugger, wat gebeurt er dan?
Waar gaat het mis/lijkt het mis te gaan?
Ik ben niet zo'n C++'er, maar moet/kan je niet in één keer delete [] product[j] doen? 't Is tenslotte één struct...

Zo scherp als een voetbal!


  • MBV
  • Registratie: Februari 2002
  • Laatst online: 22-05 21:28

MBV

waarom maak je geen object met een destructor? Dan hoef je zoieso alleen
delete product[j];
te doen, welke jij zo te zien vergeet :). In de destructor kan je ook een ShowMessage neerzetten, lijkt me. Is iig netter.
edit:
ik realiseer me ineens dat C++ geen PHP-arrays maar C-arrays heeft 8)7. Misschien is het dan handiger om met map's te werken ipv array's? Of een property isDeleted te maken, dan kan je hem overslaan. Veel meer kan je denk ik niet doen met een array.

[ Voor 38% gewijzigd door MBV op 31-05-2004 21:51 ]


  • Drazzic
  • Registratie: Juni 2001
  • Laatst online: 11-03-2025
ik heb het nu even veranderd in:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
void __fastcall TForm1::VerwijderClick(TObject *Sender)
//Pre:      De knop Verwijder is ingedrukt en de ingevulde artikelcode bestaat
//Post:     Verwijder de gegevens uit de array
//Makers:   Bas van Dijk        Datum: 31-05-2004   Klas:  E2E
{
int j,aantal;

j = 0;
aantal = units;

while(((product[j].code)!=(code->Text))&&(j<=aantal))    //Controleren of de ingevulde code voorkomt
        {
        j++;
        }
aantal++;

if (j==(aantal))        //Als hij niet voorkomt foutmelding geven.
        {
        ShowMessage ("Code komt niet voor! U kunt dit product niet verwijderen");
        }
else    //Het product bestaat verwijder hem uit de array.
        {
        delete [] product[j];
        ShowMessage ("Het product is verwijderd");
        }
}


Maar ik kan het programma al niet starten want ik krijg bij die regel (delete [] product [j];

de volgende foutmelding:

Deleting an object requires exactly one conversion to pointer operartor

Ik vraag met dus af of er geen andere code is om iets te verwijderen. Over array hetis zo dat ik dit programma al gemaakt heb maar nu is de taak om hem uit te breiden het moet dus wel een array blijven hellaas.

[ Voor 8% gewijzigd door Drazzic op 31-05-2004 21:54 . Reden: extra info ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:53
Met delete geef je geheugen vrij, je gaat dat object er niet zomaar mee uit die array halen.

Check m'n eerdere reply nog eens. :Z

https://fgheysels.github.io/


  • Drazzic
  • Registratie: Juni 2001
  • Laatst online: 11-03-2025
whoami schreef op 31 mei 2004 @ 21:53:
Met delete geef je geheugen vrij, je gaat dat object er niet zomaar mee uit die array halen.

Check m'n eerdere reply nog eens. :Z
Ja ik had dat gelezen, maar is er dan geen andere oplossing hoe hij wel compleet weg gehaald kan worden? Het lijkt me toch wel dat daar een speciale code voor moet zijn.

  • Reptile209
  • Registratie: Juni 2001
  • Laatst online: 16:54

Reptile209

- gers -

je product[j] is op dit moment geen object dat met new is aangemaakt, maar een onderdeel van een array. Datgene wat jij wilt kan niet met een element van een array.
Wat je wel zou kunnen doen is één van de volgende twee mogelijkheden:
• je datastructuur zo herschijven dat je geen array hebt, maar een collecton-class (whoami) of een zelfgemaakte linked list
• bij het verwijderen van een product alle producten die daarna komen in de array één element naar voren schuiven (product[j] = product[j+1], pas op voor de laatste :)) en de laatste op "0" zetten.

Zo scherp als een voetbal!


  • whoami
  • Registratie: December 2000
  • Laatst online: 16:53
Drazzic schreef op 31 mei 2004 @ 21:55:
[...]


Ja ik had dat gelezen, maar is er dan geen andere oplossing hoe hij wel compleet weg gehaald kan worden? Het lijkt me toch wel dat daar een speciale code voor moet zijn.
Kijk eens naar TObjectList class zoals ik al vermeld heb. Je gebruikt dan wel geen 'array' zoals je die nu gebruikt, maar een collection-class die in het VCL framework zit.
Bekijk de member methods eens van die klass, etc....

https://fgheysels.github.io/


  • Drazzic
  • Registratie: Juni 2001
  • Laatst online: 11-03-2025
whoami schreef op 31 mei 2004 @ 21:58:
[...]


Kijk eens naar TObjectList class zoals ik al vermeld heb. Je gebruikt dan wel geen 'array' zoals je die nu gebruikt, maar een collection-class die in het VCL framework zit.
Bekijk de member methods eens van die klass, etc....
Ik begrijp wat je bedoeld thanks. Maar het is helaas zo dat ik persé een array moet gebruiken ik denk dat ik het beste kan doen wat reptile als 2de functie opschrijft. Bedankt, ik ga dat eens proberen.

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:53
Drazzic schreef op 31 mei 2004 @ 22:01:
[...]


Maar het is helaas zo dat ik persé een array moet gebruiken
:? Waarom ?

https://fgheysels.github.io/


  • Drazzic
  • Registratie: Juni 2001
  • Laatst online: 11-03-2025
Schoolopdracht, we hebben vorige keer dan gemaakt dat hij bestand inlaad met allemala gegevens van producten en die moet hij in array zette. En nu als opdracht dat een product verwijderd wordt als zijn code wordt ingevuld.

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 12-05 22:23

curry684

left part of the evil twins

Drazzic schreef op 31 mei 2004 @ 21:44:
Ik heb die delete [] uit een ander topic hier maar schijnbaar werkt dat dus niet. Welke code moet ik gebruiken om wel zoiets te kunnen verwijderen?
Ja hallo, is het je wel eens opgevallen dat programmeren meer is dan alleen code bij mekaar copy-pasten? Die 'delete []' heb je heel leuk bij mekaar gevonden maar slaat hier als een tang op een varken. Je hebt dus de code gevonden maar absoluut niet gelezen wat men erbij geschreven heeft.

Ik heb echt absoluut geen zin in topics van dit niveau in P&W. Huiswerk hebben we geen probleem mee, maar dan moet er wel uit blijken dat je zelf je boek al hebt gelezen: en dat heb jij echt nog geen seconde gedaan. Doe dat eens en los zelf je problemen maar op in plaats van dit soort onzin bij ons te dumpen.

Professionele website nodig?

Pagina: 1

Dit topic is gesloten.