2016-02-15 1 views
-3

Je veux faire une copie superficielle sur une structure entière qui a la décélération constante. Mais je veux que la structure que je copie soit non constante.Existe-t-il un moyen de faire une copie superficielle d'une structure constante vers une structure non constante?

C'est ce que je l'ai fait jusqu'à présent qui produit une erreur:

struct Student{ 
    char *name; 
    int age; 
    Courses *list; //First course (node) 
}Student; 

void shallowCopy(const Student *one){ 
    Student oneCopy = malloc(sizeof(one)); 

    oneCopy = one;  <--------------- ERROR POINTS TO THIS LINE 
} 

L'erreur du compilateur Je reçois:

Assignment discards 'const' qualifier from pointer target type. 

Je sais que je peux retirer le const d'un ou ajouter le const à oneCopy, mais je veux savoir s'il existe un moyen de faire une copie superficielle dans cette situation particulière où Student one est un const et la copie Student oneCopy ne l'est pas.

+0

Pourquoi le vote négatif? Est-ce pas une question valide et unique qui affiche ce que j'ai essayé. – Brandon

+3

Je n'ai pas voté, mais le -1 pourrait être parce qu'il y a des erreurs extrêmement fondamentales ici qui seraient couvertes par n'importe quel livre ou cours d'introduction. De plus, vous n'avez pas envoyé votre code actuel: vous devriez obtenir une erreur de compilation sur la ligne 'void shallowCopy (const Student * one) {'; et un autre sur la ligne 'malloc', et une erreur différente sur la ligne indiquée. –

Répondre

3

Il devrait être:

Student* oneCopy = malloc(sizeof(*one)); 
*oneCopy = *one; 

Parce que vous souhaitez affecter la struct, pas le pointeur.

+0

Vous n'avez vraiment pas besoin de l'appel 'malloc()'. L'affectation directe fonctionne également: 'Student two = * one;'. –