为什么Microsoft的C ++ / CLI不允许我通过引用传递字符串?我收到以下错误:
C3699:'&':不能在类型'System :: String'上使用此间接
答案 0 :(得分:30)
首先,实际上有两种针对.NET的Microsoft特定C ++方言:较旧的“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");
}
答案 1 :(得分:11)
听起来像是在使用托管 C ++,这是一个与.NET Framework一起使用的混合C ++。
在托管C ++中,我相信您正在寻找的语法是System::String^
。这样做的原因是,由于托管类型是由.NET Framework收集的,因此您不能创建“常规”引用,因为GC需要跟踪对特定变量的所有引用,以了解何时可以安全地释放它
答案 2 :(得分:1)
看起来您正在使用托管C ++。您应该使用System::String^
代替。