1

我在 Visual Studio 2008 Forms 环境中尝试了这个简单的例子:

String^ textn;
textn = this->dateTimePicker1->Value.ToString();
textn = textn.substr(0, 7);

这没有与神秘的消息一起编译:

1>        type is 'System::String ^'
1>        did you intend to use '->' instead?

我已经用谷歌搜索了大约 1 小时,找出它失败的原因,但我找不到答案。我通常编写 C# 代码,但由于工作情况,我不得不降级到 C++,而且我发现做最简单的事情非常困难。

4

3 回答 3

5

这不是很神秘。它告诉你该怎么做。使用->而不是.访问托管指针的成员:

textn = textn->substr(0, 7);
于 2013-04-03T12:26:45.873 回答
0

您的代码中有两个问题:首先是访问托管类的成员;第二个是您访问的成员的名称。

使用托管类型时,您访问的成员与 C# 中的成员相同。当您使用 C++std::string时,您可以使用substr. 当你使用 时System.String,你需要使用Substring,像这样:

textn = textn->Substring(0, 7);
于 2013-04-03T12:35:35.303 回答
0

您遇到的问题是您将“C++”与“C++/CLR”混合在一起。“C++/CLR”代表 C++ 公共语言运行时,它基本上是 .NET 使用的。

当你想存储一个变量时,你现在有三种方法。

std::string    value1; // This is allocating a variable on C++ stack
std::string*   value2; // Allocating on the C++ heap.
System.String^ value3; // Handle to object on managed heap (CLR).

要记住的一个简单规则是,当它在堆上时,您需要一个箭头。

有关托管堆上对象句柄的更多信息,请参阅 http://msdn.microsoft.com/en-US/library/yk97tc08(v=vs.110).aspx

于 2013-04-03T13:48:49.273 回答