Pourquoi le C ++ / CLI de Microsoft ne permet pas de passer des chaînes par référence? J'ai reçu l'erreur suivante: p>
C3699: '&': Impossible d'utiliser cette indirection sur le type 'System :: String' P> blockQuote>
3 Réponses :
On dirait que vous utilisez géré C ++. Vous devez utiliser System :: string ^ code> à la place. P>
On dirait que vous utilisez géré em> c ++, qui est un bâtard C ++ utilisé avec la framework .NET. P>
Dans géré C ++, je pense que la syntaxe que vous recherchez est System :: string ^ code>. La raison en est que, puisque les types gérés sont recueillis par .NET Framework, vous n'êtes pas autorisé à créer des références «régulières» car le GC doit suivre toutes les références à une variable spécifique de savoir quand il est prudent de sa protéger. . P>
Jetez un coup d'œil au didacticiel de Microsoft sur le marshaling de données pour une discussion approfondie sur la manière dont la mémoire est gérée entre Native C / C ++ et géré C ++. MSDN.MicRosoft.com/en-us/Library/ms384317 (Vs.71) .aspx
Tout d'abord, il y a vraiment deux dialectes C ++ spécifiques à Microsoft pour .NET: les plus anciens "grésés C ++" (Visual Studio 2002 et 2003) et C ++ / CLI (Visual Studio 2005 et ultérieurement).
in c ++ / Cli, system :: string ^ code> est une référence .NET à une chaîne; Certains auteurs appellent cela un "pointeur de suivi" pour le comparer et le contraster avec un pointeur C ++ normal. Comme en C ++, vous pouvez transmettre des références .NET "par référence", mais au lieu d'utiliser
& code>, vous utilisez
% code>, comme dans: p>
Avons-nous explicitement besoin de supprimer le "résultat" de la variable passée de la couche C # ou le GC s'occupe-t-il de la supprimer?
Je pense que GC prendra soin de cela.
J'ai ajouté la balise C ++ - CLI parce que cela ressemble à ce que vous utilisez ici.
Tout comme point de référence: C ++ / CLI est pas i> C ++; Malgré la similitude dans les noms, les balises C ++ et C ++ - CLI sont assez proches de l'exclusivité mutuellement exclusive; Les questions sur un (y compris celui-ci) ne ressentent souvent aucun sens en ce qui concerne l'autre.