Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.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++ 打开文件名为存储变量的文件_C++_Input_Stream - Fatal编程技术网

C++ 打开文件名为存储变量的文件

C++ 打开文件名为存储变量的文件,c++,input,stream,C++,Input,Stream,我有一个类,用于存储用户提供的文件名: string EMNfn; // IDF file EMN name // IDF file EMN name void CcaAna::put_EMNfn(string s) { CcaAna::EMNfn = s; } string CcaAna::get_EMNfn() { return EMNfn; } 但是,当我尝试打开文件时,我知道它存在于当前目录中,我正在使用以下目录: femn.open(c

我有一个类,用于存储用户提供的文件名:

string EMNfn;               // IDF file EMN name

// IDF file EMN name
void CcaAna::put_EMNfn(string s)
{
    CcaAna::EMNfn = s;
}

string CcaAna::get_EMNfn()
{
    return EMNfn;
}
但是,当我尝试打开文件时,我知道它存在于当前目录中,我正在使用以下目录:

femn.open(cCCA.get_EMNfn());
我得到一个编译错误C2664…无法将参数1从'class std::basic_string,class std::allocator>'转换为'const char*'

当我尝试使用:

femn.open(cCCA.get_EMNfn().c_str());
它编译但会触发我的错误代码:

if(!femn)
{
    cout << "Open of Original EMN file failed\n";
    cout << "EMN file: " << cCCA.get_EMNfn() << endl;
    cout << "Press any key to exit" << endl;
    ch = getchar();
    return 1;
}
想法枯竭还有其他方法可以打开这条河吗

molbdnilo-我想你已经了解了一些事情(见下文)

好的,我在后面添加了两行COUT,并且在代码下面包含了输出:

cout << "EMN file: " << cCCA.get_EMNfn() << endl;
//  THIS WORKS
//  femn.open("262-003841-7-23.emn");
    femn.open(cCCA.get_EMNfn().c_str());
//  femn.open(cCCA.get_EMNfn());

cout << "this works: " << "262-003841-7-23.emn" << endl;
cout << "*****" << cCCA.get_EMNfn() << "*****" << endl;

cout您没有正确分配字符串!字符串变量不应分配有
=
运算符。是用于处理字符串的引用

完成任务的方法有很多,这里有一种:

#包括
...
strcpy(ccana::EMNfn,s)//而不是ccana::EMNfn=s

如果不检查链接并使用正确的方法处理字符串,这可能会起作用


干杯

您确定字符串相同吗?特别是空白可能很难识别。如果您使用IDE或调试器启动应用程序,则工作目录可能与可执行文件的位置不同。您应该学会使用。你正在制作一堆不必要的字符串副本。这些是C++代码> STD::String S,而不是C字符串。这个链接非常好,但我更困惑了。我的所有声明都是用C++方法“字符串变量”,并且根据链接复制字符串是C++,就像我已经用“=”符号做的一样。这让我相信这与我使用这种方法时遇到的编译错误有关:“code”femn.open(cCCA.get_EMNfn());”代码“我得到一个编译错误C2664…无法将参数1从”class std::basic_string,class std::allocator>”转换为“const char*”
cout << "EMN file: " << cCCA.get_EMNfn() << endl;
//  THIS WORKS
//  femn.open("262-003841-7-23.emn");
    femn.open(cCCA.get_EMNfn().c_str());
//  femn.open(cCCA.get_EMNfn());

cout << "this works: " << "262-003841-7-23.emn" << endl;
cout << "*****" << cCCA.get_EMNfn() << "*****" << endl;