Avatar billede trine_h Nybegynder
12. november 2003 - 14:29 Der er 14 kommentarer og
1 løsning

hvordan gøres følgende i c++

hvordan gøres følgende i c++ når pfile er en instans af en klasse (i c versionen var det en struct)

pfile->trk = calloc(pfile->sTracks, sizeof(CTrack));
Avatar billede arne_v Ekspert
12. november 2003 - 14:35 #1
På samme måde vel ??

calloc virker også i C++ !

Du kan naturnligvis erstatte den med en new og noget memset, men hvorfor ?
Avatar billede trine_h Nybegynder
12. november 2003 - 15:13 #2
Det giver mig følgende fejl (en fejlmeddelelse som ikke opstår i c versionen) gør jeg noget andet galt eller skal der et cast til?

cannot convert from 'void *' to 'MIDI_TRACK *'
Avatar billede trine_h Nybegynder
12. november 2003 - 15:16 #3
struct ser således ud:

struct CTRACK
{
    int    cData;
    BYTE * pData;
    BYTE * pCurrent;
    BYTE  byStatus;
    BOOL  bStarted;
    BOOL  bFinished;
    float  fCountDown;
    int    iTicks;
};


struct MIDI_CHANNEL
{
    BOOL  bUsed;
    BOOL  bMute;
    BOOL  bMuted;
    int    iFirstInstrument;
};

struct MIDI_FILE
{
    HWND        hwndNotify;
    HMIDIOUT    hMidiOut;
    short        sFormat;
    short        sTracks;
    short        sDivision;
    int          iTempo;
    CTRACK      * trk;
    UINT        uResolution;
    BOOL        bLoaded;
    BOOL        bGoing;
    UINT        uTimerID;
    MIDI_CHANNEL chn[16];
    int          iTotalTicks;
    float        fTicks;
    float        fTempoAdjust;
    BOOL        bPostMessageError;
};
Avatar billede arne_v Ekspert
12. november 2003 - 15:22 #4
Der skal nok et cast til:

pfile->trk = (CTtrack *)calloc(pfile->sTracks, sizeof(CTrack));
Avatar billede trine_h Nybegynder
12. november 2003 - 16:30 #5
den giver ingen fejl nu...

Jeg har lige et spørgsmål til :

static MIDI_FILE fileCopy;
static char szFileName[] = "c://test.mid";
pError = LoadMidiFile(szFileName, &fileCopy);

Hvorfor giver dette følgende fejl:
midiproject1 error LNK2019: unresolved external symbol "char * __cdecl LoadMidiFile(char *,struct MIDI_FILE *)" (?LoadMidiFile@@YAPADPADPAUMIDI_FILE@@@Z) referenced in function "public: __thiscall CStartWnd::CStartWnd(void)" (??0CStartWnd@@QAE@XZ)



funktionen der kaldes ser således ud:
char * LoadMidiFile(char * szFileName, MIDI_FILE * pfile)

Fejlen opstår ikke når jeg builder klassen - kun når jeg vælger "build solution"
Avatar billede segmose Nybegynder
12. november 2003 - 16:37 #6
Du har glem at skrive struct???

char * LoadMidiFile(char * szFileName, struct MIDI_FILE * pfile)
Avatar billede arne_v Ekspert
12. november 2003 - 16:38 #7
Hvis LoadMidiFile er C og ikke C++ så skal du nok erklære den som:

extern "C" {
char * LoadMidiFile(char * szFileName, MIDI_FILE * pfile)
}
Avatar billede trine_h Nybegynder
12. november 2003 - 17:14 #8
hvor skal den erklæres som extern henne?
Avatar billede trine_h Nybegynder
12. november 2003 - 17:16 #9
extern "C" char * LoadMidiFile(char * szFileName, MIDI_FILE * pfile)

ved at gøre ovenstående får jeg fejlen syntax error: 'string'
Avatar billede arne_v Ekspert
12. november 2003 - 17:17 #10
Der hvor den er erklæret.

Enten en linie i .cpp filen med den erklæring eller i en separat .h fil.
Avatar billede arne_v Ekspert
12. november 2003 - 17:18 #11
Prøv med tuborg klammer og semikkolon (som jeg glemte før):

extern "C" {
char * LoadMidiFile(char * szFileName, MIDI_FILE * pfile);
}
Avatar billede trine_h Nybegynder
12. november 2003 - 17:23 #12
loadmidifile funktionen er c-kode - skal jeg dermed ændre i ckoden? eller er det i c++ koden hvor funktionen kaldes fra at extern skal stå?
Avatar billede trine_h Nybegynder
12. november 2003 - 17:26 #13
jeg har prøvet at ændre i ckoden - funktionen i LoadMidiFile.h
extern "C" {
char * LoadMidiFile(char * szFileName, MIDI_FILE * pfile);
}

det giver fejlen syntax error: 'string'
Avatar billede trine_h Nybegynder
12. november 2003 - 19:24 #14
okey den skulle bare stå i .h filen

arne_v læg et svar og du får pointene - tak for hjælpen
Avatar billede arne_v Ekspert
12. november 2003 - 19:55 #15
ok
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