|
| GetTheTime fra C til C++....??? Fra : !G! |
Dato : 19-06-02 09:27 |
|
Jeg skal henvise fra mit program - lavet i C+Builder - til en extern C fil
med følgende funktion GetTheTime();
Det virker fint i C, med da CBuilder vil have det i C++.
Den siger så følgende error: cannot convert 'void *' to 'char *'..vedrørende
den sætning /*???*/
Hvordan får jeg skrevet det, så Cbuilder forstår, hvad der er den skal.?
Håber nogle kan hjælpe..
!G!
-----------kode klip---------------
#include <stdio.h>
#include <conio.h>
#include <alloc.h>
#include <dos.h>
char* GetTheTime(void);
int freeAllocated(void);
char* GetTheTime()
{
char *Time = malloc(sizeof(char)*256); /* ??? */
struct time t;
gettime(&t);
sprintf(Time,"The current time is: %2d:%02d:%02d\n", t.ti_hour, t.ti_min,
t.ti_sec);
return Time;
}
int freeAllocated()
{
char* CurrentTime;
CurrentTime = GetTheTime();
free(CurrentTime);
return 0;
}
/*
int main()
{
printf("HER er klokken \n\n");
puts(GetTheTime());
getch();
printf("\n Saa free'er vi\n");
freeAllocated();
getch();
return 0;
} */
| |
Byrial Jensen (19-06-2002)
| Kommentar Fra : Byrial Jensen |
Dato : 19-06-02 16:08 |
|
!G! <gugge@email.dk> skrev:
> Jeg skal henvise fra mit program - lavet i C+Builder - til en extern C fil
> med følgende funktion GetTheTime();
> Det virker fint i C,
Nej, det virker ikke i C.
> med da CBuilder vil have det i C++.
>
> Den siger så følgende error: cannot convert 'void *' to 'char *'..vedrørende
> den sætning /*???*/
Der kan vistnok ikke konverteres automatisk mellem pointer til void
og pointere til objekter i C++. (Det kan gruppens C++-eksperter
sikkert uddybe). Altså endnu et eksempel på at korrekt C-kode ikke
altid også er korrekt C++-kode. Kan du ikke fortælle CBuilder at
filen skal oversættes som en C-fil?
> Hvordan får jeg skrevet det, så Cbuilder forstår, hvad der er den skal.?
Fortæl CBuilder at det er C-kode. Jeg ved ikke hvordan.
> char* GetTheTime()
> {
> char *Time = malloc(sizeof(char)*256); /* ??? */
> struct time t;
> gettime(&t);
> sprintf(Time,"The current time is: %2d:%02d:%02d\n", t.ti_hour, t.ti_min,
> t.ti_sec);
> return Time;
> }
Du bruger Time uden at tjekke om hukommelsesallokeringen gik godt
eller ej. malloc() returnerer en NULL-pointer hvis der ikke er mere
fri hukommelse, og det bør altid tjekkes.
> int freeAllocated()
> {
> char* CurrentTime;
> CurrentTime = GetTheTime();
> free(CurrentTime);
> return 0;
> }
Her frigiver du ikke den hukommelse som blev allokeret ved sidste
kald af GetTheTime(), men du allokerer (måske, jf.ovenfor) noget nyt
hukommelse som straks efter frigives. Koden skulle se sådan her ud:
int freeAllocated(char *Time)
{
free(Time);
return 0;
}
> int main()
> {
> printf("HER er klokken \n\n");
>
> puts(GetTheTime());
> getch();
>
> printf("\n Saa free'er vi\n");
> freeAllocated();
>
> getch();
> return 0;
> }
int main()
{
char *Time;
printf("HER er klokken \n\n");
Time = GetTheTime();
puts(Time);
getch();
printf("\n Saa free'er vi\n");
freeAllocated(Time);
getch();
return 0;
}
| |
Povl H. Pedersen (19-06-2002)
| Kommentar Fra : Povl H. Pedersen |
Dato : 19-06-02 17:35 |
|
In article <sfXP8.62647$N46.2093443@news010.worldonline.dk>,
"!G!" <gugge@email.dk> wrote:
> Jeg skal henvise fra mit program - lavet i C+Builder - til en extern C fil
> med følgende funktion GetTheTime();
> Det virker fint i C, med da CBuilder vil have det i C++.
så laver du vel bare en:
extern "C" {
char *GetTheTime( void );
}
og linker med den compilerede C fil.
> Den siger så følgende error: cannot convert 'void *' to 'char *'..vedrørende
> den sætning /*???*/
Så kan de vel bare manuelt typecaste til (char *)
Det er malloc der returnerer en uspecificeret pointer der altid skal
castes.
> Hvordan får jeg skrevet det, så Cbuilder forstår, hvad der er den skal.?
>
> Håber nogle kan hjælpe..
Kernighan & Ritchie kan hjælpe med C
Stoustrup med C++
| |
|
|