Puntatori a void C++
Devo allocare dinamicamente 2 vettori con una certa dimensione ed in base alla posizione dell'elemento devo fare la divisione(dispari) o la potenza(posizione pari) e mettere i risultati in un altro vettore allocato dinamicamente.
Il problema che ho è nell'ultima funzione del main che mi dice:
cannot convert void**....
main.cpp
mathop.h
mathop.cpp
Il problema che ho è nell'ultima funzione del main che mi dice:
cannot convert void**....
main.cpp
#include "mathop.h" int main() { vettore A,B,C; //v puntatore a void int t=-1; cout<<"Crea un vettore numerico float o unsigned short:\n Inserisci 0(per float) e 1(per unsigned short): "; while(t==-1) { cin>>t; if(t!=0 && t!=1) cout<<"SBAGLIATO A DIGITARE!!! Riprova\n"; } cout<<"Inserisci la dimensione del vettore: "; int n=0; //dimensione del vettore cin>>n; cout<<"Creo il vettore A:\n"; leggi_vettore(A,n,t); cout<<"Creo il vettore B:\n"; leggi_vettore(B,n,t); pfunz *f= produci_pfunz(n); C=produci_vettore (A,B,n, f, t);
mathop.h
#ifndef MATHOP_H_ #define MATHOP_H_ #include <iostream.h> #include <math.h> typedef void *vettore; typedef void (*pfunz)(void*,void*, void*,int,int); void leggi_vettore(void* &, int, int); pfunz *produci_pfunz (int); void* produci_vettore (void* , void* , int , pfunz , int ); void stampa_vettore(void*, int, int); void potenza (void*, void*, void*, int, int); void divisione (void*, void* , void* , int , int); #endif /* MATHOP_H_ */
mathop.cpp
#include "mathop.h" void leggi_vettore(void* & v, int n, int t) //alloco il vettore in base a t e poi lo riempio { if(t==0) { float *vett=static_cast<float*>(v); //creo un vettore puntatore vett=new float[n]; float x; cout<<"Creo il vettore\n"; for (int i=0;i<n;i++) { cout<<"Inserisci il " <<i <<" valore: "; cin>>x; vett[i]=x; } } else { unsigned short *vett=static_cast<unsigned short*>(v); //creo un vettore puntatore ad A vett=new unsigned short[n]; unsigned short y; for (int i=0;i<n;i++) { cout<<"Inserisci il " <<i <<" valore: "; cin>>y; vett[i]=y; } } } pfunz *produci_pfunz (int n) //funzione puntatore a float che allora n vettori e li inizializza ad a e b { pfunz *pf = new pfunz[n]; for (int i=0;i<n;i++) { if(i%2==0) { pf[i]=&divisione; } else { pf[i]=&potenza; } } return pf; } void* produci_vettore (void* v1, void* v2, int n, pfunz* f[], int t) { if(t==0) { float *C = new float[n]; //alloco C come float float *f=static_cast<float*>(C); for (int i=0;i<n;i++) { C[i]=f[i]; } return C; } else { unsigned short *C = new unsigned short[n]; //alloco C come unsigned short unsigned short *f=static_cast<unsigned short*>(C); for (int i=0;i<n;i++) { C[i]=f[i]; } return C; } } void potenza (void* res, void* a, void* b, int t, int n) { cout<<"STO QUI"; if(t==0) { float *res1=static_cast<float*>(res); float *a1=static_cast<float*>(a); float *b1=static_cast<float*>(b); for (int i=1;i<=n;i++) { res1[i]=pow(a1[i],b1[i]); } } else { unsigned short *res1=static_cast<unsigned short*>(res); unsigned short *a1=static_cast<unsigned short*>(a); unsigned short *b1=static_cast<unsigned short*>(b); for (int i=1;i<=n;i++) { res1[i]=pow(a1[i],b1[i]); } } } void divisione (void* res, void* a, void* b, int t, int n) { cout<<"STO QUI"; if(t==0) { cout<<"STO QUI"; float *res1=static_cast<float*>(res); float *a1=static_cast<float*>(a); float *b1=static_cast<float*>(b); for (int i=0;i<n;i++) { cout<<"STO QUI"; res1[i]=a1[i]/b1[i]; } } else { unsigned short *res1=static_cast<unsigned short*>(res); unsigned short *a1=static_cast<unsigned short*>(a); unsigned short *b1=static_cast<unsigned short*>(b); for (int i=0;i<n;i++) { res1[i]=a1[i]/b1[i]; } } }
Risposte
ci avevo mancato il simbolo del puntatore..ora funziona, ma ho notato che non parte la funzione C=producivettore....come mai?