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?