错误:表达式必须具有类类型?

时间:2014-07-29 21:43:08

标签: class types c++-cli

可能是这么简单的修复,但我似乎无法弄清楚问题是什么。 第二行是问题所在,我做错了什么?

System::String^ userinfo = DownloadHTMLPage("http://xat.com/web_gear/chat/auser3.php");
String^ str2 = gcnew String(userinfo.c_str());

2 个答案:

答案 0 :(得分:3)

userInfo是一个指针,因此您应该将该行写为

System::String^ str2 = gcnew System::String(userinfo->c_str());

答案 1 :(得分:0)

System::StringString是同一个类。由于.Net字符串是不可变的,因此您无需使用gcnew创建另一个字符串,您可以直接使用userinfo

String^ userinfo = DownloadHTMLPage("http://xat.com/web_gear/chat/auser3.php");

// Use userinfo in your code, or...
String^ str2 = userinfo;

基于对其他答案的评论,看起来你得到了C ++字符串和.Net字符串混淆。 他们不是同一个班级!

要从一个转换为另一个,请使用marshal_as,如下所示:

#include <marshal_cppstd.h>

String^ managed = "foo";

std::string unmanagedNarrow = marshal_as<std::string>(managed);
std::wstring unmanagedWide = marshal_as<std::wstring>(managed);

String^ managed2 = marshal_as<String^>(unmanagedNarrow);
String^ managed3 = marshal_as<String^>(unmanagedWide);