26. marts 2004 - 13:51
Der er
8 kommentarer og 1 løsning
Adgang til private data i klasse fra interruptrutine
Hej! Jeg sidder og programmerer en klasse, WheelPulseSensor, som indeholder en interrupt service rutine - se nedenstående headerfil (constructoren foretager al nødvendig opsætning af interrupt service rutinen og starter interrupts og det hele). Problemet er at jeg får linkerfejl når jeg forsøger at køre det - variablen pulses kan ikke resolves under linkningen... ------------------------------------------------------ class WheelPulseSensor { public: WheelPulseSensor(); int getPulses() { return pulses; } static void RTKAPI IRQHandler() { pulses ++; RTKEnableInterrupts(); RTKIRQEnd(irq_to_respond_to); } private: static const int irq_to_respond_to = 5; static int pulses; };
Annonceindlæg tema
Forsvar & beredskab
Cybersikkerhed, realtidsdata og robuste it-systemer er blevet fundamentet for moderne forsvar.
26. marts 2004 - 14:11
#1
Der mangler vel en: int WheelPulseSensor::pulses = 0;
26. marts 2004 - 16:27
#2
Køre du RTKernel?
26. marts 2004 - 16:35
#3
>>Der mangler vel en: >> >>int WheelPulseSensor::pulses = 0; Nej, i constructoren sættes de statiske variable til 0. Og man kan jo ikke gøre det i header-filen medmindre de også er const, men det dur ikke. >>Køre du RTKernel? ja :o)
26. marts 2004 - 20:13
#4
Jeg skal starte med at sige at jeg kender intet til environmentet. Men jeg forstår ikke hvad sammenhængen mellem at pulses bliver initialiseret i constructor og om den bliver defineret er. C:\>type x1.cpp class X { public: static int n; X(); }; X::X() { n = 0; } int main() { X x; return 0; } C:\>cl x1.cpp Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86 Copyright (C) Microsoft Corp 1984-1998. All rights reserved. x1.cpp Microsoft (R) Incremental Linker Version 6.00.8447 Copyright (C) Microsoft Corp 1992-1998. All rights reserved. /out:x1.exe x1.obj x1.obj : error LNK2001: unresolved external symbol "public: static int X::n" (?n@X@@2HA) x1.exe : fatal error LNK1120: 1 unresolved externals C:\>type x2.cpp class X { public: static int n; X(); }; X::X() { n = 0; } int X::n = 0; int main() { X x; return 0; } C:\>cl x2.cpp Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86 Copyright (C) Microsoft Corp 1984-1998. All rights reserved. x2.cpp Microsoft (R) Incremental Linker Version 6.00.8447 Copyright (C) Microsoft Corp 1992-1998. All rights reserved. /out:x2.exe x2.obj
27. marts 2004 - 11:59
#5
minsandten, det ser ud til at det virker! hvordan kan det være at man skal sætte den statiske variabel ude fra "ingenting"?
27. marts 2004 - 12:01
#6
hvordan giver jeg dig de 150 point? jeg er ny her på Eksperten... :o)
27. marts 2004 - 18:21
#7
Jeg ligger et svar som du kan acceptere
27. marts 2004 - 18:22
#8
Sådan er statiske klasse variabel i C++
27. marts 2004 - 19:10
#9
sådan, du - og tak for det gode eksempel!
Kurser inden for grundlæggende programmering