C ++ / CLI: Почему я не могу передать строки по ссылке? - PullRequest
6 голосов
/ 14 октября 2010

Почему Microsoft C ++ / CLI не позволяет мне передавать строки по ссылке? Я получил следующую ошибку:

C3699: '&': нельзя использовать это косвенное указание для типа 'System :: String'

Ответы [ 3 ]

30 голосов
/ 14 октября 2010

Прежде всего, на самом деле существует два специфичных для Microsoft диалекта C ++ для .NET: более старый «Managed C ++» (Visual Studio 2002 и 2003) и C ++ / CLI (Visual Studio 2005 и более поздние версии).

В C ++ / CLI, System::String^ является ссылкой .NET на строку; некоторые авторы называют это «указателем отслеживания», чтобы сравнить и сопоставить его с обычным указателем C ++. Как и в C ++, вы можете передавать ссылки .NET «по ссылке», но вместо & вы используете %, например:

void makeStr(System::String^ %result) {
   result = gcnew System::String("abc");
}
11 голосов
/ 14 октября 2010

Звучит так, как будто вы используете Управляемый C ++, который представляет собой убогий C ++, используемый с .NET Framework.

в Managed C ++, я считаю, что синтаксис, который вы ищете, равен System::String^.Причина этого заключается в том, что поскольку управляемые типы собирают мусор в .NET Framework, вы не можете создавать «регулярные» ссылки, поскольку GC должен отслеживать все ссылки на определенную переменную, чтобы знать, когда ее можно безопасно освобождать..

1 голос
/ 14 октября 2010

Похоже, вы используете Managed C ++. Вы должны использовать System::String^ вместо.

...