08. november 2010 - 14:02Der er
6 kommentarer og 1 løsning
char array
Jeg undrer mig over at en hardkodet værdi ændre sig!? Lidt kode info:
typedef char TDato[9]; //Input skal være DDMMYYYY
::
Funktion: double TKlasse::Beholdning(TDato Dato) { :: Dato værdien/arrayet kan ændrer værdi herinde i løbet af en beregning! Denne ændrede værdi skal ikke bruges udenfor funktionen. }
Kald af funktion som fejler pånær ved 1. kald: :: double res = Klasse.Beholdning("01012010\0");
Det er somom "01012010\0" fungerer som en variabel og ikke en konstant! Ved andet kald kan Dato have ændret sig indeni funktionen 'Beholdning', også selvom parameteren er hardkodet til "01012010\0"
int main() { int i; for(i = 0; i < 10; i++) { f("ABC"); } return 0; }
C:\>cl wrtstr.c Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86 Copyright (C) Microsoft Corporation. All rights reserved.
wrtstr.c Microsoft (R) Incremental Linker Version 10.00.30319.01 Copyright (C) Microsoft Corporation. All rights reserved.
C:\>cl /GF wrtstr.c Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 16.00.30319.01 for 80x86 Copyright (C) Microsoft Corporation. All rights reserved.
wrtstr.c Microsoft (R) Incremental Linker Version 10.00.30319.01 Copyright (C) Microsoft Corporation. All rights reserved.
Hvis du er sikker på at den funktion ikke ændre noget data så erklær hele funktionen const, det gør det også nemmere senere at se at den her gør ikke noget mærkeligt.
class TKlasse { double Beholdning(TDato Dato) const; // et al. };
class TKlasse { double Beholdning(const TDato& Dato) const; // ie. jeg lover at jeg ikke vil ændre TKlasse og heller ikke Dato. // et al. };
ps. Tilføjet referance for at man ikke kommer til at kopiere structurer ved et uheld.
Synes godt om
Ny brugerNybegynder
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.