Avatar billede mikkeljans Nybegynder
23. juni 2004 - 16:34 Der er 17 kommentarer og
1 løsning

Statisk Enum i klasse

Hvorfor er det her ikke lovligt:

Jeg laver en klasse med en enum i:

class Global
{
public:
    static enum SelectionType
{POLY, VERTEX, EDGE, FACE, MANIPULATOR, MANIPHANDLE, COMPONENT, OBJECT, LIGHT, CAMERA};
};


Så har jeg en anden function som ser ca sådan her ud:

void ObjectArray::Add(Global::SelectionType Type)
{
    if (Type == POLY)
og her kommer en fejl:
error C2065: 'POLY' : undeclared identifier

Hvordan kan det være?
POLY er en del Global::SelectionType
Avatar billede chries Nybegynder
23. juni 2004 - 16:37 #1
prøv:
Global::POLY eller Global::SelectionType::POLY
Avatar billede arne_v Ekspert
23. juni 2004 - 16:40 #2
Jeg forstår ikke hvorfor du vil have static der !  Hvad skulle compileren gøre ?
Avatar billede mikkeljans Nybegynder
23. juni 2004 - 16:50 #3
Hvorfor skulle der ikke være static der?
Avatar billede arne_v Ekspert
23. juni 2004 - 16:54 #4
static på et felt eller en metode betyder at de er på klassen og ikke på instanserne

hvad mener man med en type definition som er på klassen og ikke på instanserne ?
Avatar billede mikkeljans Nybegynder
23. juni 2004 - 17:28 #5
Klassen Global skal der aldrig laves en instance af.
Dne er bare en slags hylde jeg ligger vigtige variabler og functioner ind i som tit skal bruges i mange sammenhæng.

Hvor skulle den ellers ligge henne?
Avatar billede nico26 Nybegynder
23. juni 2004 - 17:31 #6
forstår heller ikke din static

class Global
{
public:
    enum SelectionType
{POLY, VERTEX, EDGE, FACE, MANIPULATOR, MANIPHANDLE, COMPONENT, OBJECT, LIGHT, CAMERA};
};
Avatar billede nico26 Nybegynder
23. juni 2004 - 17:32 #7
void ObjectArray::Add(Global::SelectionType Type)
{
    if (Type == Global::POLY)
Avatar billede mikkeljans Nybegynder
23. juni 2004 - 17:41 #8
Det vil sige at hvis man laver en klasse som der ikke skal laves objecter af, så behøver man ikke static?
static er kun til hvis man skal have en variable som er fælles for alle objecter?
Avatar billede tommya Nybegynder
23. juni 2004 - 18:31 #9
Hvis du vil have det i Global hvorfor så ikke bruge et namespace?
Avatar billede mikkeljans Nybegynder
23. juni 2004 - 18:43 #10
Namespaces har jeg ikke kigget på enddu. Så ved ikke helt hvordan det fungere.
Avatar billede arne_v Ekspert
23. juni 2004 - 18:48 #11
static er noget man bruger til felter og metoder - ikke til typer
Avatar billede mikkeljans Nybegynder
23. juni 2004 - 19:09 #12
Nu har jeg fået enddu et problem med Global klasse:

class Global
{
public:
    enum SelectionType
    {POLY, VERTEX, EDGE, FACE, MANIPULATOR, MANIPHANDLE,
    COMPONENT, OBJECT, LIGHT, CAMERA, NONE};

    enum SelectionMode
    {OBJECTMODE, VERTEXMODE, EDGEMODE, FACEMODE};

    static SelectionList ActiveSelectionList;
};

Og skriver jeg:
Global::ActiveSelectionList.Clear();
giver den en linking fejl:
Move.obj : error LNK2001: unresolved external symbol "public: static class SelectionList Global::ActiveSelectionList" (?ActiveSelectionList@Global@@2VSelectionList@@A)

Hvad kan det skyldes?
Avatar billede arne_v Ekspert
23. juni 2004 - 20:09 #13
Har du en:

SelectionList Global::ActiveSelectionList;

i en af dine .cpp filer ?
Avatar billede mikkeljans Nybegynder
25. juni 2004 - 11:44 #14
Nej.
Kan det have noget at gøre med at jeg har en:
class SelectionList;
over min global klasse?
Blev nød til at erklærer SelectionList klassen fordi Global skal bruge den klasse og SelectionList skal bruge Global klassen.
Avatar billede arne_v Ekspert
25. juni 2004 - 11:50 #15
Det skal du.
Avatar billede arne_v Ekspert
25. juni 2004 - 11:51 #16
class Global
{
public:
...
    static SelectionList ActiveSelectionList;
};

lover at det bliver erklæret en global variabel.

SelectionList Global::ActiveSelectionList;

erklærer den faktisk.
Avatar billede mikkeljans Nybegynder
25. juni 2004 - 11:58 #17
Nå ja det også rigtigt statiske medlemsvariabler skal erklæres først.
Tak for hjælpen!
Avatar billede arne_v Ekspert
25. juni 2004 - 22:00 #18
Så ligger jeg et svar
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