Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ SNAP C++;字符串类型向TStr发出std::字符串_C++ - Fatal编程技术网

C++ SNAP C++;字符串类型向TStr发出std::字符串

C++ SNAP C++;字符串类型向TStr发出std::字符串,c++,C++,在快照库中有一种方法允许我在电脑中保存文件,如下所示: TSnap::SaveEdgeList(G, q, "Edge list format");` 在这个函数中,第二个参数的类型是TStr,它表示快照库中的字符串类型 我有一个string^变量,它包含一个完整的目录,我想把我的文件放在这样的地方(注意:它只包含一个反斜杠,所以我必须用双反斜杠替换它) 然后我将string^类型的文件名变量转换为std::string,如下所示: std::string s = filename->T

快照库中有一种方法允许我在电脑中保存文件,如下所示:

TSnap::SaveEdgeList(G, q, "Edge list format");`
在这个函数中,第二个参数的类型是TStr,它表示快照库中的字符串类型

我有一个
string^
变量,它包含一个完整的目录,我想把我的文件放在这样的地方(注意:它只包含一个反斜杠,所以我必须用双反斜杠替换它)

然后我将
string^
类型的文件名变量转换为
std::string
,如下所示:

std::string s = filename->ToString;
TStr q = s.c_str();;
#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;
}
我想做的是将字符串变量
s
的内容赋给TStr变量,在其他成员的帮助下,我这样做了:

std::string s = filename->ToString;
TStr q = s.c_str();;
#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;
}
但不幸的是,它仍然给出了一个错误:

error C3867: 'System::String::ToString': non-standard syntax; use '&' to create a pointer to member

有人有什么建议或替代方案吗?

看起来您使用的是系统字符串。在这种情况下,您可以使用编组从
System::String^
转换为
std::String
。包括:
并使用
msclr::interop::marshal_作为
方法,如下所示:

std::string s = filename->ToString;
TStr q = s.c_str();;
#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;
}
#包括
#包括
#包括
类对话框
{
公众:
系统::字符串^FileName()
{
返回“名称”;
}
};
int main(数组^args)
{
Dialog*openFileDialog1=新建对话框;
系统::字符串^filename=openFileDialog1->filename();
std::string s=msclr::interop::封送(filename->ToString());

std::cout该错误很可能与
std::string s=filename->ToString;
有关,它应该是
std::string s=filename->ToString();
nope当我这样做时,它会给出一个错误,因为ToString without()是string^not string类型的函数(有区别)不,错误是因为that@KillzoneKid下面是给我的错误:
1>c:\users\morganis\source\repos\project4\project4\myform.h(201):错误C2440:“初始化”:无法从“System::String^”转换为“std::basic\u String”1>c:\users\morganis\source\repos\project4\project4\myform.h(201):注意:没有构造函数可以采用源类型,或者构造函数重载解析不明确
非常感谢,尽管我只做了一件事:
std::string s=msclr::interop::marshal_as(filename);
是的,看起来还支持直接字符串^to std::string编组。很高兴您对其进行了排序。