Conversion de 'myItem *' en type non-scalaire 'myItem' demandé
J'ai ce code C++:
#include <iostream>
using namespace std;
struct MyItem
{
int value;
MyItem* nextItem;
};
int main() {
MyItem item = new MyItem;
return 0;
}
Et j'obtiens l'erreur:
error: conversion from `MyItem*' to non-scalar type `MyItem' requested
De la compilation avec g++. Qu'est-ce que cela signifie? Et ce qui se passe ici?
source d'informationauteur kralco626
Vous devez vous connecter pour publier un commentaire.
Essayer:
Mais n'oubliez pas de le supprimer après utilisation:
Vous avez mélangé
qui alloue une instance de
MyItem
sur la pile. La mémoire de l'instance est automatiquement libéré à la fin de l'affichage de la portéeet
qui alloue une instance de
MyItem
sur le tas. Vous faites référence à cette instance, à l'aide d'un pointeur, et qu'ils devraient explicitement libérer de la mémoire lorsque vous avez terminé avecdelete item
.Tout d'abord, ce code ne compile pas parce que vous avez oublié le point-virgule après chaque déclaration de variable de membre et après
MyItem
déclaration et le mot-clé "struct" est tapé tort. Votre code devrait ressembler à ceci:Maintenant répondre à votre question, ce code ne fonctionne pas parce que le nouvel opérateur renvoie un pointeur sur l'objet créé (une valeur de type
MyItem*
) et que vous tentez d'affecter cette pointeur vers une variable de typeMyItem
. Le compilateur ne vous permet pas de le faire (parce que la valeur et la variable de différents types). Vous devez stocker le pointeur dans un winrar variable, comme ceci:Dans ce cas, vous devez vous rappeler de
delete item
pour éviter la fuite de mémoire lorsque vous n'avez plus besoin.Alternativement, vous pouvez créer l'objet dans la pile sans la
new
opérateur.Dans ce cas, l'objet cesse d'exister lorsque la fonction retourne; vous n'avez pas besoin de vous rappeler de le supprimer.
Ici est édité code avec les modifications mentionnées sur le droit
BTW, vous n'avez pas ont pour ne
new
. Vous pouvez possible de créer unMyItem
objet sur la pile comme