Avatar billede ladyhawke Novice
03. december 2002 - 10:36 Der er 24 kommentarer og
3 løsninger

class variable i Builder

Hvordan laver og initialiserer jeg en class variable i C++ Builder, som tælles én op for hver gang constructoren kaldes? Den skal helst ikke være global
Avatar billede jpk Nybegynder
03. december 2002 - 10:41 #1
Initialiserer = giver en startværdi:
m_Val = 0; // fx

men det er sikkert ikke det du mener...

Hvad med at lave en statisk variabel og så i constructoren kalde ++m_Var?
Avatar billede ladyhawke Novice
03. december 2002 - 10:44 #2
Jo, men hvor i klassen? (jeg ved godt hvordan man tildeler en værdi, men min variabel i øjeblikket er global (skal den ikke være) og det giver nogle warnings...

class TDataObject
{
    private:    // User declarations

    public:    // User declarations
 
        __fastcall TDataObject();

};
Avatar billede jpk Nybegynder
03. december 2002 - 10:47 #3
Det afhænger jo af hvad du ønsker

Hvis den skal være direkte tilgængelig, skal den være public osv.
Avatar billede ladyhawke Novice
03. december 2002 - 10:49 #4
Den skal bare kunne læses i klassens constructor (private), den skal bruges til at tildele et id til en datastruktur.

Jeg kan godt erklære en statisk variabel, men hvor kan jeg initialisere den? (skulle gerne starte med at være: static int nCount = 1)
Avatar billede ladyhawke Novice
03. december 2002 - 10:50 #5
med (private) mener jeg at det skal variablen være (ikke constructoren :o)
Avatar billede arne_v Ekspert
03. december 2002 - 10:52 #6
Noget i retning af:

class X {
  private:
      static int count = 0;
  public:
      X() {
        count++;
      }
};
Avatar billede segmose Nybegynder
03. december 2002 - 10:54 #7
#include <stdlib.h>
#include <iostream.h>

class TestCount {
  static int cnt;

public:
  TestCount(void) { cnt++; }

  void printit(void) { cout << "cnt=" << cnt; /*printf("cnt=%d", cnt);*/ }
};

int TestCount::cnt = 0;

int main() {
  TestCount t1,t2,t3;

  t3.printit();

  return EXIT_SUCCESS;
}

Hemmeligheden er "static".
Avatar billede jpk Nybegynder
03. december 2002 - 10:54 #8
class Test
{
public:
    Test();
    static int m_nCount;
};

Test::Test()
{
    ++m_nCount;
}

int Test::m_nCount = 1;
Avatar billede ladyhawke Novice
03. december 2002 - 10:55 #9
Min "class TDataObject" er definieret i .h filen og jeg kan ikke initialisere en class member der, og det skal jo ikke være i constructoren...
Avatar billede jpk Nybegynder
03. december 2002 - 11:08 #10
Du skal initialisere den i en separat linie:

int Test::m_nCount = 1;

ligesom du definerer en funktion

int Test::MyFunc()
{
}
Avatar billede jpk Nybegynder
03. december 2002 - 11:09 #11
Undskyld, ikke definerer, men implementerer...
Avatar billede ladyhawke Novice
03. december 2002 - 11:15 #12
i .h fil:

class TDataObject
{
    private:    // User declarations

    public:        // User declarations
        static int nIDCount;
        __fastcall TDataObject();

};

i hovedprogram (MainGui.cpp):

TDataObject::nIDCount = 1;

men så får jeg:
[Linker Error] Unresolved external 'TDataObject::nIDCount' referenced from W:\GUI\MAINGUI.OBJ

Hvorfor det?
Avatar billede jpk Nybegynder
03. december 2002 - 11:20 #13
Jame har du ikke TDataObject.cpp?
Avatar billede jpk Nybegynder
03. december 2002 - 11:21 #14
Variablen hører jo til TDataObject-klassen!
Altså bør du initialisere den i den tilhørende .cpp-fil, hvis du har en sådan, ellers i .h-filen
Avatar billede ladyhawke Novice
03. december 2002 - 11:27 #15
Njahh, jeg har den cpp fil som indeholder klassen (GuiClasses.cpp) - indeholder flere klasser, her er impl. af TDataObject's constructor (der er ikke andet relateret til TDataObject i filen):

__fastcall TDataObject::TDataObject()
{
    //generic
    nID            = nIDCount;   
    nIDCount++;
}

kan jeg bare skrive:

TDataObject::nIDCount = 1;

før constructoren i cpp filen?
Avatar billede ladyhawke Novice
03. december 2002 - 11:30 #16
nah, så får jeg: Type name expected...
Avatar billede jpk Nybegynder
03. december 2002 - 11:31 #17
Ja, eller efter...
Avatar billede jpk Nybegynder
03. december 2002 - 11:31 #18
Skriv:
int TDataObject::nIDCount = 1;
Avatar billede ladyhawke Novice
03. december 2002 - 11:31 #19
Hvordan kan jeg initialisere variablen i .h filen? (jvf. jpk / 11:21:51)
Avatar billede jpk Nybegynder
03. december 2002 - 11:32 #20
På nøjagtig samme måde!!!
Avatar billede ladyhawke Novice
03. december 2002 - 11:33 #21
Det virker (11:31:26), men hvorfor skal typen med, den er jo defineret?
Avatar billede jpk Nybegynder
03. december 2002 - 11:34 #22
Hvorfor skal typen med når duu definerer implementerer en funktion, den er jo defineret..?
Avatar billede jpk Nybegynder
03. december 2002 - 11:34 #23
hehe, lige hurtig nok...

Hvorfor skal typen med når du implementerer en funktion, den er jo defineret..?
Avatar billede ladyhawke Novice
03. december 2002 - 11:35 #24
Tjah :o) You're right!
Tak for tålmodigheden :o) Jeg fordeler lige pointene
Avatar billede ladyhawke Novice
03. december 2002 - 11:40 #25
BTW jeg havde overset "int" i svaret 11:08:32 ... (beklager...)
Avatar billede jpk Nybegynder
03. december 2002 - 11:46 #26
Okay, bare du fandt ud af det...
Avatar billede ladyhawke Novice
03. december 2002 - 11:53 #27
Det gjorde jeg :o) Nu kan jeg løse de andre "detaljer" ;o)
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