codice:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>

using namespace std;

struct List
{
   /*
    * The information index
    */
	int index;
    /*
    * The information value
    */
    void * data;	
   /*
    * The next list element
    */
	List * next;
	/*
     * Create struct
     * 1. The struct index
     * 2. The struct data
     * 3. The next structure addres
     */
	List(int Index, void * Data,  List * Next)
	{
	    data = Data;
		index = Index;
		next = Next;
	}
	/*
     * Add a element
     * 1. A List pointer
     * 2. A index of element
     * 3. The value of element
     */
	void add(List * pr, int index, void * data)
	{
		if(pr == NULL){ /* first element */
			pr->index = index;
			pr->data = data;
			pr->next = NULL;
		}
		/* another case */
		List * p = pr;
		while(p->next != NULL)
		p = p->next;
		p->next = new List(index, data, NULL);
	}
	/*
     * Print all element
     * 1. A List pointer
     * 2. A mode
     * 0 = wiew into a addres
     * 1 = wiew into a string
     */
	void print(List * pr, int mode=1)
	{
	    List * p = pr;
	    while(p->next != NULL){
	        if(mode==0) 
                     cout << "Info " << p->index <<" = " << p->data << "\n";
            else if(mode==1)  
                     cout << "Info " << p->index <<" = " << (char *) p->data << "\n";       
            p = p->next;
        }
	}
	/*
     * Find a element
     * 1. A List pointer
     * 2. A index that you wont to find
     */
	List *find(List * pr, int index)
	{
         List * p = pr;
         while((p->next != NULL) && (p->index != index))
         p = p->next;
         return p;
	}	
	/*
     * Remove a element
     * 1. A List pointer
     * 2. A index of element
     */
	void remove(List * pr, int index)
	{
	   List * p = pr;
       if(!p) return;
       if(p->index == index)
       {
           List * tmp = p->next;
           delete p;
           p = tmp;
       }
       else
          remove(p->next, index);
   }
	/*
     * Generate a list.
     * 1. a array 
     * 2. a array lenght
	 */
	List* generate(List * pr, void * parms[], int lenght)
	{
         for(register int i=0; i<lenght; i++){
             pr->next = new List(i, parms[i], NULL);
         }
	}
};

int main(int *argc, char *argv[])
{
    string * st = new string("ciao");
    List * p = new List(0, st, NULL);
    int i = 0;
    while( i != 10){
        p->add(p, i, (string *) st);
        i++;
    }
    cout << "Prima\n";
    p->print(p);
    p->remove(p, 5);
    cout << "Dopo\n";
    p->print(p);
    system("PAUSE");
    return 0;
}
Ora mi da errore in print().............mi stampa sempre gli indirizzi, why?


Tnk