Conversion from 'void*' to pointer to non-'void' requires an explicit cast (Line 17)
===

I'm following a Book, called learn c the hard way and when I try to run this program I get an error message : 'Conversion from 'void*' to pointer to non-'void' requires an explicit cast'. I'm not sure how to resolve this, do I have to change the return variable in the struct?

Take a look anyway, here the code: (Compiling on Visual C++ 2010, haven't tried GCC yet.)

       //learn c the hardway

      #include <assert.h>
      #include <stdlib.h>
      #include <string.h> 
      #include <stdio.h>
      
      struct Person {
          char *name;
          int age;
          int height;
          int weight; 
      };
      
      struct Person *Person_create(char *name, int age, int height, int weight) 
      {
          struct Person *who = malloc(sizeof(struct Person)); 
          assert(who != NULL);
      
          who->name = strdup(name);
          who->age = age; 
          who->height = height;
          who->weight = weight;
      
          return who;
      } 
      
      void Person_destroy(struct Person *who)
      {
          assert(who != NULL);
       
          free(who->name);
          free(who);
      }
      
      void Person_print(struct Person *who) 
      {
          printf("Name: %s\n", who->name);
          printf("\tAge: %d\n", who->age); 
          printf("\tHeight: %d\n", who->height);
          printf("\tWeight: %d\n", who->weight); 
      }
      
      int main(int argc, char *argv[])
      {
          // make two people structures 
          struct Person *joe = Person_create(
                  "Joe Alex", 32, 64, 140);
       
          struct Person *frank = Person_create(
                  "Frank Blank", 20, 72, 180); 
      
          // print them out and where they are in memory 
          printf("Joe is at memory location %p:\n", joe);
          Person_print(joe);
       
          printf("Frank is at memory location %p:\n", frank);
          Person_print(frank); 
      
          // make everyone age 20 years and print them again 
          joe->age += 20;
          joe->height -= 2;
          joe->weight += 40; 
          Person_print(joe);
      
          frank->age += 20;
          frank->weight += 20; 
          Person_print(frank);
      
          // destroy them both so we clean up 
          Person_destroy(joe);
          Person_destroy(frank);
      
          return 0;
      }