Avatar billede hhdsleizer Nybegynder
16. februar 2004 - 17:02 Der er 6 kommentarer og
1 løsning

mfc fejl?

hej eksperter.
jeg undrer mig over følgende:
Jeg kalder en dialog hvori der er en edit box der smider en tal værdi i int'en m_nKoebsAntal denne bliver hentet over i min main dialog med:
CKoeb dlg;
dlg.DoModal();
m_nKoebsAntal = dlg.m_nKoebsAntal;
Hvis jeg herefter konvertere int'en til en char og smider den i en messagebox kommer der og det rigtige tal op.
MEN.. længere nede i programmet kalder jeg en anden funktion(void IndtegnEgneVarer()) og det er her problemet opstår. hvis jeg konvertere int'en her og smider den i en messagebox er tallet pludselig et 9 cifret negativt tal??? hvorfor? både funktionen der indhenter værdien og funktionen der bliver kaldt er member i samme klasse hvorvariablerne også er? hvad er der galt?

Sleizer
Avatar billede bertelbrander Novice
16. februar 2004 - 19:46 #1
Er tallet -842150451, eller?

Det er svært at gætte hvor fejlen er ud fra det beskrevne, noget kunne tyde på at variablen bliver overskrevet.

Post noget mere kode.
Avatar billede hhdsleizer Nybegynder
16. februar 2004 - 20:12 #2
tallet starter ihvertfald med -8xxxxxxxx....
koden jeg bruger til at få variablens værdi og kalder funktionen er her
CKoeb dlg;
   
    UpdateData(true);
    dlg.DoModal();
    m_nKoebsAntal = 0;
    m_nKoebsAntal = dlg.m_nKoebsAntal;
    int nIndex = m_lbVarer.GetCurSel();
    if (nIndex != LB_ERR)
    {
    m_lbVarer.GetText(nIndex , m_strValg);
    }
    UpdateData(false);
    if(m_strValg != "")
    {
        IndtegnEgneVarer();
    }
}

void CButikDlg::IndtegnEgneVarer()
{
UpdateData(true);
if(m_strValg == m_strKniv)
{
    MessageBox(_T("Kniv"));
    m_nKoebtAntalKniv = m_nKoebtAntalKniv + m_nKoebsAntal;
}
sprintf(m_chAntalKniv, "%d", m_nKoebtAntalKniv);
MessageBox(m_chAntalKniv);
}

jeg har fundet ud af at fejlen nok ligger i sætningen:
m_nKoebtAntalKniv = m_nKoebtAntalKniv + m_nKoebsAntal;
da hvis jeg undlader den og konvertere m_nKoebsAntal istedet for m_nKoebtAntalKniv giver det den rigtige værdi i messageboxen? hvad gør jeg galt i den sætning eller i den kode blok?
Avatar billede bertelbrander Novice
16. februar 2004 - 20:55 #3
Du har:
    CKoeb dlg;
    ...
    m_nKoebsAntal = 0;
    m_nKoebsAntal = dlg.m_nKoebsAntal;

Hvorfor sætter du m_nKoebsAntal to gange?

Er m_nKoebtAntalKniv blevet sat til at være noget inden linien med:
m_nKoebtAntalKniv = m_nKoebtAntalKniv + m_nKoebsAntal;

Jeg går ud fra at m_nKoebsAntal er deb samme son den m_nKoebsAntal du har ovenfor.

m_nKoebtAntalKniv = m_nKoebtAntalKniv + m_nKoebsAntal;
Er det samme som:
m_nKoebtAntalKniv += m_nKoebsAntal;

Member variable der ikke er blevet initialiseret vil blive sat til 0xCDCDCDCD = -842150451 af "kompileren" i debug builds.
Avatar billede hhdsleizer Nybegynder
16. februar 2004 - 21:01 #4
heh.. havde innitialiseret m_nKoebtAntalKniv længere oppe.. have bare gjort det på en underlig måde... men virker nu... takker...
Avatar billede jpk Nybegynder
17. februar 2004 - 10:45 #5
Et par kommentarer:

Generelt bør du ikke gemme værdier som let kan beregnes
Det ser du til at du har 3 members, m_nKoebtAntalKniv, m_nKoebtAntalKniv og m_nKoebsAntal hvor den første er summen af de 2 andre.
I stedet kunne du lave en simpel funktion:
GetKoebtAntalKniv() { return m_nKoebtAntalKniv + m_nKoebsAntal; };
Det kan nemlig give problemer hvis du opdaterer én variabel, men ikke de andre.


Hvilken type er m_chAntalKniv?
Er det blot en char som du skriver, eller er det et char array?

Du kan iøvrigt bruge CString's Format-metode istedet for sprintf, altså:
sprintf(m_chAntalKniv, "%d", m_nKoebtAntalKniv);
kan erstattes med:
m_strAntalKniv.Format("%d", m_nKoebtAntalKniv);
eller m_strAntalKniv.Format("%d", m_GetKoebtAntalKniv());
Hvor m_strAntalKniv er en CString.


Bare et par kommentarer, held og lykke med det...
Avatar billede hhdsleizer Nybegynder
30. maj 2004 - 00:45 #6
lukker
Avatar billede hhdsleizer Nybegynder
30. maj 2004 - 00:45 #7
hvis nogle mener de fortjente point skal i være velkomne til at kontakte mig sleizer@msn.com
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