Avatar billede c-skau Nybegynder
13. marts 2005 - 16:15 Der er 21 kommentarer og
1 løsning

Glemsom class?

G'morn Eksperter

Jeg vil godt starte med at afsløre at jeg er en absolut nybegynder til C++ men dog har lidt styr på programmering.
Og så til mit problem.. Jeg kan ikke få min class til at virke som den skal da den går hen og glemmer min "int GameState"-værdi.
Jeg har lavet en funktion til Get() og en til Set().
Når jeg så får sat min GameState til f.eks. "2" v.h.a. Set() og så prøver at retunere den ved Get() får jeg "0"..
Hva er galt?

/c-skau
Avatar billede kalp Novice
13. marts 2005 - 16:17 #1
så virker din set nok ikke.. må man se lidt kode?
Avatar billede jpvj Nybegynder
13. marts 2005 - 16:18 #2
Du får formodentlig ikke sat en global variabel for klassen.

Vær opmærksom på, hvilke scopes der gælder, dvs. hvornår variable er defineret.

Smid din kode her - så retter vi den...
Avatar billede c-skau Nybegynder
13. marts 2005 - 16:23 #3
Ups.. glemte helt koden:

-------------cGameState.H----------------
#ifndef cGameState_H
#define cGameState_H

class cGameState
{
protected:

int GameState;

public:

int Get();
void Set(int state);

};

#endif
----------------------
---------cGameState.cpp----------
#include "cGameState.h"
#include "..\extern.h"

int cGameState::Get()
{
  return GameState;
}

void cGameState::Set(int state)
{

  //Gamestates: 0-Init, 1-Menu, 2-Game, 3-Closing
  GameState = state;
  if (GameState == 3)
  {
      device->closeDevice();
  }
}
----------------------
Avatar billede arne_v Ekspert
13. marts 2005 - 16:25 #4
Og det er samme instans du kalder Get og Set på ?
Avatar billede c-skau Nybegynder
13. marts 2005 - 16:28 #5
Jeg siger "cGS.Set(2)" når spillet starter
og
"while (cGS.Get() == 2)" når min EventReceiver fanger noget..
Avatar billede arne_v Ekspert
13. marts 2005 - 16:29 #6
Og cGS er samme instans i de 2 ?
Avatar billede c-skau Nybegynder
13. marts 2005 - 16:30 #7
De to steder includere jeg så:

-------------Classes.h---------------
#ifndef Classes_H
#define Classes_H
#include "functions.h"

static cCursor cCu;
static cLoader cL;
static cKeyMap cKM;
static cDraw cD;
static cCamera cCa;
static cGameState cGS;
static cControl cCo;
static cTime cT;

#endif
------------------------------
Avatar billede arne_v Ekspert
13. marts 2005 - 16:31 #8
Så er det ikke samme instans !

Prøv lige med:

extern cGameState cGS;
Avatar billede c-skau Nybegynder
13. marts 2005 - 16:34 #9
og "functions.h" har så : " #include "cGameState.h" " (bl.a.)
Som sagt er jeg stort set lige begyndt på C++ så min kode er måske lidt rodet men jeg håber jeg er på rette spor :)
Avatar billede c-skau Nybegynder
13. marts 2005 - 16:35 #10
Med extern får jeg så:
error LNK2001: unresolved external symbol "class cGameState cGS" (?cGS@@3VcGameState@@A)
Det er vel fordi den skal defineres et sted ..ikke? f.eks. i min main.h?
Avatar billede arne_v Ekspert
13. marts 2005 - 16:37 #11
Du kan godt prøve i main.cpp at lave en:

cGameState cGS;
Avatar billede c-skau Nybegynder
13. marts 2005 - 16:43 #12
Nu har jeg prøvet at flytte lidt rundt på tingene, men nu får jeg så en meget underlig fejl. Fejlen er muligvis p.g.a. Irrlicht(http://irrlicht.sourceforge.net)for mit vindue fryser ..nærmest.. men når jeg så skifter fokus over på et andet vindue hopper den pludselig videre :S
Avatar billede arne_v Ekspert
13. marts 2005 - 16:48 #13
Nu tror jeg lige at vi skal holde de forskellige problemer adskilt ellers
bliver det vist kaos.

Virker game state nu ?
Avatar billede c-skau Nybegynder
13. marts 2005 - 16:49 #14
Men altså ikke fordi min class kan glemme værdi men fordi jeg får to cGameState med samme navn? (hvor lærer jeg meget :)
Avatar billede c-skau Nybegynder
13. marts 2005 - 16:50 #15
Ja undskyld for forvirringen, men jeg kan desværre ikke teste det da det nu overhoved ikke virker :/
Avatar billede arne_v Ekspert
13. marts 2005 - 16:51 #16
static på en variabel udenfor metode/funktion betyder:
  denne her variabel er lokal for denne fil og kan ikke ses af andre filer
Avatar billede arne_v Ekspert
13. marts 2005 - 16:51 #17
Ikke at forveksle med static inden i en funktion/metode og static i en class
som betyder noget helt andet
Avatar billede c-skau Nybegynder
13. marts 2005 - 17:22 #18
Nu har jeg prøvet at rede lidt ud i min kode, men får så: error C2146: syntax error : missing ';' before identifier 'cCo'?
Avatar billede c-skau Nybegynder
13. marts 2005 - 17:27 #19
Ups undskyld igen! Jeg er meget forviret lige nu og havde ikke set at det hele pegede tilbage til sig selv.
Avatar billede c-skau Nybegynder
13. marts 2005 - 17:34 #20
Jeg tror det rigtige problem her er at finde en måde at få alle klasserne til at kunne se hinanden uden at skulle inkludere hver og en i hver klasse..?
Avatar billede c-skau Nybegynder
14. marts 2005 - 08:23 #21
Nu er jeg vist kommet lidt på afveje igen..
Tror desuden det lykkedes mig i min forvirring igår at løse problemet.
Skulle også mene at det lykkedes for arne_v at besvare mit oprindelige spørgsmål så hvis du lige gider smide et svar?
Avatar billede arne_v Ekspert
14. marts 2005 - 08:27 #22
ok
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