在 SNAP库中,有一种方法可以让我在我的电脑中保存文件:
TSnap::SaveEdgeList(G, q, "Edge list format");`
在此函数中,第二个参数的类型为 TStr ,表示 SNAP库中的字符串类型
我有一个string^
变量,其中包含我想要放置文件的完整目录(P.S:它只包含一个反斜杠,所以我必须用双反斜杠替换它)
string^ filename = openFileDialog1->FileName;
然后我将string^
类型的文件名变量转换为std::string
,如下所示:
std::string s = filename->ToString;
我想要做的是将字符串变量s
的内容提供给 TStr 变量,并且在其他成员的帮助下,我确实喜欢这样:
TStr q = s.c_str();;
但不幸的是,它仍然会出错:
error C3867: 'System::String::ToString': non-standard syntax; use '&' to create a pointer to member
有人有建议,或替代解决方案,还是什么?
答案 0 :(得分:1)
看起来您正在使用系统字符串component extension。在这种情况下,您可以使用编组方式从System::String ^
转换为std::string
。包括:<msclr/marshal_cppstd.h>
并使用msclr::interop::marshal_as
方法,如下所示:
#include <iostream>
#include <string>
#include <msclr/marshal_cppstd.h>
class Dialog
{
public:
System::String^ FileName()
{
return "name";
}
};
int main(array<System::String ^> ^args)
{
Dialog *openFileDialog1 = new Dialog;
System::String^ filename = openFileDialog1->FileName();
std::string s = msclr::interop::marshal_as<std::string>(filename->ToString());
std::cout << s << std::endl;
return 0;
}