Seneste forumindlæg
Køb / Salg
 * Uofficiel Black/White liste V3
Login / opret bruger

Forum \ Programmering og webdesign \ Programmering
Denne tråd er over 6 måneder gammel

Er du sikker på, at du har noget relevant at tilføje?

C++, pointer problem, hjælp søges

Af Junior Nørd b4me | 02-08-2012 03:07 | 1161 visninger | 6 svar, hop til seneste
Hej Jeg har et problem med at få en stump kode til at kører korrekt Starter lige med koden. //MSG relay variables bool msg_way1 = false; bool msg_way2 = false; bool msg_way3 = false; const char *_lcdProgMemprint; const char *_lcd_status; const char *_lcd_statuspgm; //relay functions to recreate the last send message void lcd_statuspgm(const char *message) { msg_way1 = false; msg_way2 = false; msg_way3 = true; _lcd_statuspgm = message; lcd_statuspgmRelay(_lcd_statuspgm); }[/COD- E] Forløbet er som følge. Først kalder programmet funktionen hvor den sender en tekst som er en #define: LCD_MESSAGEPGM(WELCOME_MSG); - der så gerne skulle gemme message i _lcd_statuspgm og sende beskeden videre til lcd_statuspgmRelay Dette virker også fint. Men når jeg så kalder funktionen efterfølgende via void relay_msg(void) { if(msg_way3 == true) lcd_statuspgmRelay(_lcd_statuspgm); } så sker der intet, beskeden er som forsvundet ! :( Det er nok noget med mit scope for pointeren, men jeg kan ikke gennemskue min fejl. Håber en kan hjælpe mig
--
"Jeg forbeholder mig ret til til tryk fejl"© "Hvis hjernen ikke kan, kan en hammer" B4Me™
#1
Steffen
Gæst
02-08-2012 11:44

Rapporter til Admin
Det jeg tænker er: hvorfor står der const foran alle dine char*? Jeg er ikke sikker på hvordan det er i c++, men const er normalt en konstant, og kan ikke ændre værdi. Virker det hvis du fjerner const fra alle dine variabler? (det undrer mig faktisk lidt at det ikke kaster en exception, men du opretter dem selvfølgelig ikke med en værdi, så om man kan sætte værdien bagefter ved jeg faktisk ikke)
--
Gæstebruger, opret dit eget login og få din egen signatur.
#2
TGV
Monsterbruger
02-08-2012 12:39

Rapporter til Admin
Jeg er ret sikker på at han har const foran sine char* fordi han kalder det i en define og derfor skal argumentet være const(mener jeg). Som #1 så tænker jeg også at du sætter adressen på en const, hvilket nok godt kan lade sig gøre men fjerner ideen med at det er en const ( da den jo så ændrer sig). Jeg vil også foreslå at du lavede det uden const, da der ikke er nogen direkte grund til at have dem - så må du arbejde dig uden om din define. :)
--
#3
b4me
Junior Nørd
02-08-2012 15:34

Rapporter til Admin
Jeg glemte helt at nævne det er i arduino miljøet jeg programmere, altså embedded. Jeg undrede mig også selv over det med const, men lod det være da dette er kode jeg blot redigere i, for at få mulighed for at genskabe den sidst sendte besked der er blevet sendt til mit display. Jeg har dog lidt svært ved at uddybe det nærmere da jeg selv er lidt forvirret :P
--
"Jeg forbeholder mig ret til til tryk fejl"© "Hvis hjernen ikke kan, kan en hammer" B4Me™
#4
TGV
Monsterbruger
02-08-2012 15:57

Rapporter til Admin
Nu har jeg tænkt lidt mere, og givet at du har deklareret det som du har med: const char *_lcd_status; Så er det lovligt at ændre adressen, men ikke værdien(altså indirekte ændre værdien). Jeg tror at den variable der bliver oprettet i din funktion lcd_statuspgm , altså din const char *message kun er lokal i scope, og derfor når du ændrer sin globale variable til at pointe til en lokal variable der forsvinder ved oprydning af funktionen, så vil din globale variable pointe ud i noget tomt (burde dog give compile fejl). Du kan jo evt. prøve at sende adressen i stedet for værdien, eller oprettet en int med adressen. Der er mange muligheder :) Jeg tror du har helt ret i at det er en scope fejl. Nu er det lidt tid siden jeg har lavet C, men håber jeg hjælper og ikke forvirrer.. :)
--
#5
TGV
Monsterbruger
02-08-2012 15:59

Rapporter til Admin
(og lige for at forklare hvorfor const faktisk kan ændres): When a value of a ‘const’ variable can be calculated during the compilation, it creates a true constant. References to such constant are replaced with its value whenever it is used. That’s why there is no location in the memory that can be changed to affect all places where it is used. It is like using #define. When value of a ‘const’ variable cannot be calculated during the compilation, it creates a read-only variable. It has a location in the memory that contains a value but compiler enforces a read-only behavior.
--
#6
b4me
Junior Nørd
02-08-2012 22:36

Rapporter til Admin
Mange tak for svarene, fik løst problemet, dog en helt anden vej omkring, ved at angribe tingene i slutningen istedet for starten, og derved kunne jeg ende ud med blot at kopier en string.. Men det med const.. står der ikke i den tekst du cirterede at den er READ ONLY ? hvordan kan man så ændre den da
--
"Jeg forbeholder mig ret til til tryk fejl"© "Hvis hjernen ikke kan, kan en hammer" B4Me™

Opret svar til indlægget: C++, pointer problem, hjælp søges

Grundet øget spam aktivitet fra gæstebrugere, er det desværre ikke længere muligt, at oprette svar som gæst.

Hvis du ønsker at deltage i debatten, skal du oprette en brugerprofil.

Opret bruger | Login
NYHEDSBREV
Afstemning


ANNONCE