/ Forside / Teknologi / Udvikling / C/C++ / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
C/C++
#NavnPoint
BertelBra.. 2425
pmbruun 695
Master_of.. 501
jdjespers.. 500
kyllekylle 500
Bech_bb 500
scootergr.. 300
gibson 300
molokyle 287
10  strarup 270
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++

Søg
Reklame
Statistik
Spørgsmål : 177496
Tips : 31968
Nyheder : 719565
Indlæg : 6408491
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste