|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2003
Città: cagliari
Messaggi: 619
|
problemi in visual c++
ho creato un programma in c in cui ho utilizzato delle strutture per creare delle liste dinamiche:
struct nodo { int info; int w; struct nodo *next; }; il mio problema è che : se compilo il singolo programma ,senza nessun modulo aggiuntivo, va tutto liscio; mentre se inserisco dei moduli in c++ mi da degli errori in una linea di comando in cui efettuo un allocazione dinamica (cannot convert from 'void *' to 'struct nodo *') Mi è stato detto che in visual c++ se utilizzo delle strutture all'interno di moduli c++ , il programma si incasina. è vero? |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Re: problemi in visual c++
Quote:
struct nodo *n = (struct nodo *) puntatore_void; In alternativa, mantieni separato il codice c dal codice c++, in file con estensioni distinte. Ricordati però che il c++ richiede che le funzioni presenti in moduli c siano dichiarate con il prefisso extern "C".
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Nov 2003
Città: cagliari
Messaggi: 619
|
Re: Re: problemi in visual c++
Quote:
cosa intendi con effettuare cast espliciti? cioè dovrei fare un assegnazione espicita? p = malloc(sizeof(struct nodo)); ( questo è ciò che avevo scritto) dovrei scrivere così? struct nodo *p = (struct nodo *) malloc(sizeof(struct nodo)); |
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Sì esattamente, basta il semplice (struct nodo *) prima della malloc.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Nov 2003
Città: cagliari
Messaggi: 619
|
è sparito l'errore ma è comparso questo:
error C2086: 'p' : redefinition questa è la funzione: void accoda(struct nodoQ **primo, int v) { struct nodoQ *p; struct nodoQ *p =(struct nodoQ *) malloc(sizeof(struct nodoQ)); p->info = v; p->next = *primo; *primo = p; return; } |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
|
Certo ti ho solo detto di aggiungere il cast, non di ripetere la dichiarazione
Devi usare questa forma: p =(struct nodoQ *) malloc(sizeof(struct nodoQ));
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12 |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Nov 2003
Città: cagliari
Messaggi: 619
|
Grazie dell'aiuto
Ho risolto i problemi |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Nov 2003
Città: cagliari
Messaggi: 619
|
ora mi ritrovo lo stesso problema con un allocazione di un puntatore che punta ad un array di puntatori
p[row]=malloc(sizeof(struct nodoQ)) dove p è stato definito prima come struct nodoQ *p[nodi] come faccio in questo caso? |
|
|
|
|
|
#9 |
|
Senior Member
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
|
p[row]=(struct nodoQ *)malloc(sizeof(struct nodoQ))
Con questo tipo di uso della malloc basta che fai precedere la chiamata della malloc ocn una coppia di parentesi tonde dentro le quali metti il tipo che passi a sizeof, seguito da un asterisco. (Precisamente andrebbe messo il tipo della variabile che stai assegnando, che in genere è un puntatore al tipo che passi a sizeof)
__________________
Sun Certified Java Programmer EUCIP Core Level Certified European Certification of Informatics Professionals Ultima modifica di anx721 : 28-09-2004 alle 16:04. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 11:10.



















