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
Annonceindlæg fra FPT Software
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?
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(); };
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.
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)
03. december 2002 - 10:50
#5
med (private) mener jeg at det skal variablen være (ikke constructoren :o)
03. december 2002 - 10:52
#6
Noget i retning af: class X { private: static int count = 0; public: X() { count++; } };
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".
03. december 2002 - 10:54
#8
class Test { public: Test(); static int m_nCount; }; Test::Test() { ++m_nCount; } int Test::m_nCount = 1;
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...
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() { }
03. december 2002 - 11:09
#11
Undskyld, ikke definerer, men implementerer...
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?
03. december 2002 - 11:20
#13
Jame har du ikke TDataObject.cpp?
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
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?
03. december 2002 - 11:30
#16
nah, så får jeg: Type name expected...
03. december 2002 - 11:31
#17
Ja, eller efter...
03. december 2002 - 11:31
#18
Skriv: int TDataObject::nIDCount = 1;
03. december 2002 - 11:31
#19
Hvordan kan jeg initialisere variablen i .h filen? (jvf. jpk / 11:21:51)
03. december 2002 - 11:32
#20
På nøjagtig samme måde!!!
03. december 2002 - 11:33
#21
Det virker (11:31:26), men hvorfor skal typen med, den er jo defineret?
03. december 2002 - 11:34
#22
Hvorfor skal typen med når duu definerer implementerer en funktion, den er jo defineret..?
03. december 2002 - 11:34
#23
hehe, lige hurtig nok... Hvorfor skal typen med når du implementerer en funktion, den er jo defineret..?
03. december 2002 - 11:35
#24
Tjah :o) You're right! Tak for tålmodigheden :o) Jeg fordeler lige pointene
03. december 2002 - 11:40
#25
BTW jeg havde overset "int" i svaret 11:08:32 ... (beklager...)
03. december 2002 - 11:46
#26
Okay, bare du fandt ud af det...
03. december 2002 - 11:53
#27
Det gjorde jeg :o) Nu kan jeg løse de andre "detaljer" ;o)
Kurser inden for grundlæggende programmering