SNAP C ++字符串类型问题std :: string到TStr

时间:2018-05-02 20:56:00

标签: c++

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

有人有建议,或替代解决方案,还是什么?

1 个答案:

答案 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;
}