Avatar billede cyrezdk Nybegynder
25. september 2006 - 14:13 Der er 7 kommentarer

Object(/Panel) i array i Visual C++ 2005

Jeg kommer lige fra Java (så I må bære lidt over med mig :), og står derfor helt uforstående overfor at jeg ikke bare kan lave en ArrayList med en masse Object'er i (men det er nok bare min syntax der er gal).

Vision:
Jeg vil lave en Form, der har et Panel med en masse små Panel's oven på, lige som et skakbræt.
Når man trykker på en af disse Panel's skal en MouseUp-funktion afgøre på hvilken der er trykket, og derefter gå ind i arrayet og hente det pågældende Panel-object.

Det ville være voldsomt fedt hvis jeg også kunne lave min egen Panel-klasse, hvor jeg kunne have nogle flere variabler i, i stedet for at bruge den medfødte Panel.

På forhånd tak :)
Avatar billede snakeeye Nybegynder
25. september 2006 - 14:54 #1
Panelklasse custom made er muligt da du jo "bare" kan nedarve fra panelklassen og så overskrive/tilføje flere variabler.

En arraylist, tjooo. Du kan jo godt lave et array af objecter, problemet er bare at jeg mener ikke der er et arraylist som er lige så dynamisk som den i java/c#. du kan jo bare lave din egen arraylist som har de funktionaliteter som du søger i arraylist
Avatar billede tokelil Nybegynder
25. september 2006 - 15:26 #2
Bruger du managed c++ eller hvilket miljø bruger du? (STL evt.?)
ArrayList fra .net er pænt tæt på Java's ArrayList så vidt jeg husker. (Kan indeholde alle objecter der nedarver fra CObject)

Hvis du ikke bruger .net, så tag evt. et kik på STLs vector klasse.
Avatar billede cyrezdk Nybegynder
25. september 2006 - 20:08 #3
snakeeye:
Hmm, fik lige en masse at tænke på dér.

tokelil:
Jeg ved ikke hvad managed/unmanaged er, men jeg bruger MS Visual C++ 2005 Express.
Jeg begynder dog at ønske mig noget mere simpelt, da jeg pt. end ikke fatter at instantiere et hjemmelavet object :(

Anyway, bliver nok lige nødt til at holde spørgsmålet åbent er par dage. Fik måske sigtet lidt højt til at starte med.
Avatar billede tokelil Nybegynder
25. september 2006 - 20:44 #4
Man snakker for det meste mananed/unmanaged sprog i forbindelse med om programmet kører i en eller anden form for virtual maskine. (Så som Javas VM) En af de store fordele er at man mere eller mindre slipper for at håndtere hukommelse selv. (Det vil sige man slipper for at tænke over hvor man allokere sine objekter og om man husker at slette dem igen.)

Under Visual Studio 2005 kan man både skrive managed og unmanaged programmer. Hvis du kikker på funktionerne i hjælp, kan du se at en del af det er beskrevet som værende tilgængelig i .Net framework (som er Microsofts managed framework), mens andet står som værende deklareret i Windows.h, stdio.h mv.
Avatar billede cyrezdk Nybegynder
25. september 2006 - 22:28 #5
Nu er jeg nået frem til at have lavet en (hel) klasse, tror jeg nok.
Btw, når man kommer fra Java er C++ ikke ligefrem... smart :( og det er ikke nødvendigvis pointers jeg tænker på)!
Mit problem pt. (sig lige til hvis jeg skal oprette et nyt spm. til det i stedet):

Jeg har lavet én klasse delt i to filer:

-<>- BattlePanel.cpp -<>-

#include "stdafx.h"
#include "BattlePanel.h"

void BattlePanel::setShip(bool value){
    ship = value;
}
void BattlePanel::setShot(bool value){
    shot = value;
}

-<>- BattlePanel.h -<>-

class BattlePanel
{
    private:
    bool ship;
    bool shot;
    int x;
    int y;
    public:
    void setShip(bool value);
    void setShot(bool value);
};
}

Hvordan instantierer man så et object af BattlePanel fra en anden klasse (den bliver ved med at sige "undeclared identifier")? Tror jeg skal inkludere et eller andet, men aner ikke hvor.
Avatar billede tokelil Nybegynder
25. september 2006 - 22:45 #6
Du skal:
#include "BattlePanel.h"
i den fil hvor du vil oprette en instans af BattlePanel klassen. Så burde det bare være:
BattlePanel bp();
bp.setShip(true);
etc.
Avatar billede tokelil Nybegynder
25. september 2006 - 22:49 #7
Btw. du skal være opmærksom på at ovenstående vil oprette objektet på stacken og den vil derved kun være tilgængelig i det "scope" hvor den er oprettet.

Et objeckt oprettes på heap med new eller malloc() og nedlægges tilsvarende med delete og free.
F.eks.:
BattlePanel* bp = new BattlePanel();
bp->setShip(true);
delete bp;
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester