Puntatori a void C++

Angelo.V1
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
#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
Angelo.V1
ci avevo mancato il simbolo del puntatore..ora funziona, ma ho notato che non parte la funzione C=producivettore....come mai?

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.