C ++ / CLI:为什么我不能通过引用传递字符串?

时间:2010-10-14 01:09:06

标签: string reference c++-cli managed-c++

为什么Microsoft的C ++ / CLI不允许我通过引用传递字符串?我收到以下错误:

  

C3699:'&':不能在类型'System :: String'上使用此间接

3 个答案:

答案 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^代替。