Avatar billede diensdal Nybegynder
22. maj 2003 - 14:00 Der er 1 kommentar

Gemme objecter i MFC's egen linkede liste

Jeg arbejder lige fortiden med at skrive et program i MFC. Jeg modtager med en event styret funktion data fra serial porten og vil gerne efter at disse er blevet behandlet gemme dem i et object og ind i en linkede liste for senere at kunne tegne en graf ud fra dette.
Den event styrede funktion bliver kaldt for hvergang serial porten for input modtager input der sker hvert sekund.
Mit problem er at jeg ikke kan tegne en fornuftig graf udfra de dataer som ligger i den linkede liste da det lader til at alle daterne er de samme. Jeg har afprøvet tegngraf funktion ved at oprette et array med data i disse og dette virkede efter hensigt dog dette går galt vis jeg bruger inputet fra den linkede liste.
Jeg har brugt MFC's egen linkede liste CObList.

Her er den event styrede funktion:
void CMainFrame::OnReceiving(WPARAM port)
{
    CClientDC dc(this);
    int            ageFlag;
    pos          =    pList->GetHeadPosition();

    _package = pSerial->getFrame();
    ageFlag    = pProtocol->decoder(_package);

    pList->AddTail(pProtocol->ptr_toCykel);

    MyGraf *pulsGraph = new MyGraf();
    pulsGraph->graphDrawing(countint, this);
    delete pulsGraph;
}

Her er cpp filen for decodern:
#include "Protocol.h"
#include "CycleComputerData.h"

Protocol::Protocol(){ptr_toCykel = new CycleComputerData;}

Protocol::~Protocol()
{}

int Protocol::decoder(CString frames)
{
    int flag = 0;                //flag which tells our program if age was with the
                                //current string or not
    switch(frames.GetAt(0))
    {
    case ':':
        flag = group_5(frames);
        break;
    default:
        return -1;
    }
    return flag;
}

int Protocol::group_5(CString frames)
{
    CString tempString = "5";
   
    ptr_toCykel->setID(tempString);
    tempString = "";
   
    ptr_toCykel->setGear(frames.GetAt(1));        // sætter gear

    for(int i=2; i<5; i++)
        tempString = tempString + frames.GetAt(i);// lægger i'ende plads sammen med temp stringen
    ptr_toCykel->setPuls(tempString);                    // sætter puls
    tempString = "";

    for(i=5; i<8; i++)
        tempString = tempString + frames.GetAt(i);
    ptr_toCykel->setSpeed(tempString);                    // sætter hastighed
    tempString = "";

    // kontrolere om stringen indeholder age eller ej
    if(frames.GetLength() == 10)
    {   
        for(int i=8; i<10; i++)
        {
            tempString = tempString + frames.GetAt(i);
        }
        ptr_toCykel->setAge(tempString);                // sætter aldern

        return 1;
    }
    return 0;
}

Og her er selve objected jeg gerne vil gemme i den linkede liste:
//@file CycleComputerData.h
// This module costructs cycle computer.
// a complex object, (data received from bike)
////////////////////////////////////////////////////

#ifndef _CycleComputerData_H_
#define _CycleComputerData_H_   

#include <afxwin.h>        // MFC core and standard components
#include <afxext.h>        // MFC extensions
#include <afxdisp.h>        // MFC Automation classes
#include <afxdtctl.h>        // MFC support for Internet Explorer 4 Common Controls


//////////////////////////////////////////////////////////////////////////////////////
// CycleComputerData


class CycleComputerData    : public CObject
{
   
// Attributes
private:
    CString _speed;
    CString _gear;
    CString _age;
    CString _puls;
    CString _id;
public:
//Constructor
    CycleComputerData()    { _speed,_gear,_id,_puls, _age;    };
//    ~CycleComputerData();

//Getters
    CString getCurrentSpeed()        { return(_speed);    };
    CString getCurrentGear()        { return(_gear);    };
    CString getCurrentAge()            { return(_age);        };
    CString getCurrentPuls()        { return(_puls);    };
    CString getID()                    { return(_id);        };

    CycleComputerData* getMuObj() { return (this);        };    

//Setters
    void setSpeed(CString speed)     { _speed = speed;    };
    void setGear(CString gear)        { _gear= gear;        };
    void setAge(CString age)        { _age = age;        };
    void setPuls(CString puls)        { _puls = puls;     };
    void setID(CString id)            { _id = id;            };
};

/////////////////////////////////////////////////////////////////////////////////
#endif//_CycleComputerData_H_

Håber at de giver nogen mening.
Avatar billede bertelbrander Novice
23. maj 2003 - 00:13 #1
Jeg kan ikke fortælle dig hvor det går galt i ovenstående.
Det jeg ville gøre i den situation var at prøve at skrive det pSerial->getFrame() returnerer og indholdet af pProtocol->ptr_toCyke inden det bliver putttet ind i listen med pList->AddTail til en fil, og så studere dette.
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



IT-JOB

Udviklings- og Forenklingsstyrelsen

Ledende domænearkitekt til Moms Domæne-arkitekturteam

Capgemini Danmark A/S

Salesforce CTO - Nordics

Cognizant Technology Solutions Denmark ApS

Test Manager

Aller Leisure A/S

Erfaren .NET-udvikler