C++ 将字符串传递给file.open();

C++ 将字符串传递给file.open();,c++,string,pointers,C++,String,Pointers,我已经习惯了更高层次的语言(java、python等),这是显而易见的。我试图将用户输入的字符串传递给cin,即要打开的文件的名称。似乎出现了某种指针疯狂错误,我的代码将无法编译。 我删除了一些代码以使其更清晰 #include <iostream> #include <fstream> using namespace std; string hash(string filename); int main(){ co

我已经习惯了更高层次的语言(java、python等),这是显而易见的。我试图将用户输入的字符串传递给cin,即要打开的文件的名称。似乎出现了某种指针疯狂错误,我的代码将无法编译。 我删除了一些代码以使其更清晰

   #include <iostream>
   #include <fstream>
   using namespace std;

   string hash(string filename);

   int main(){
           cout << "Please input a file name to hash\n";
           string filename;
           cin >> filename;
           cout <<hash(filename);
           return 0;
   }


    string hash(string filename){
            file.open(filename);
            if(file.is_open()){

                   file.close();
            }

            return returnval;
    } 
#包括
#包括
使用名称空间std;
字符串散列(字符串文件名);
int main(){
cout>文件名;
cout
open()
接受一个C样式的字符串。使用
std::string::C_str()
来获取该字符串:

file.open (filename.c_str());
正如下面指出的,为了只使用字符串,您需要使用支持C++11的编译器,因为重载是为C++11添加的

它与Java等不同的原因是它来自C。C中不存在类(好吧,不如C++中的类好)为了让C++提供字符串类并保持兼容性,它们需要不同的东西,并且类提供了一个转换构造函数,用于<代码> const char *> STD::string < /C> >以及CyString()/<代码>,以另一种方式。


考虑传递参数(也可能传递返回)如<代码> const STD::String和;没有必要的复制。优化可能会赶上那些,但总是很好。

优,第一部分修正了我的问题。但是C字符串和C++字符串之间的区别是什么?还有,我应该把const STD::String &?我尝试方法声明,StandL方法调用,但都给出编译时错误。@ Muricula,C风格字符串更简单的是字符数组。C++字符串是一个具有函数、状态等的实际类。我将在这里找到一个好问题。@ Muricula,这里有一个:使用另一种选择是使用一个更新的编译器。C++ 11标准增加了<代码>打开(字符串)
对流起作用。在发布之前,请先去掉行号和额外的间距。这会使复制和粘贴代码以进行测试变得很困难。@LokiAstari,我发现太晚了,但在大多数编辑器中,您可以按Ctrl+Alt+Selection选择包含数字的列,然后立即将其全部删除。这为我节省了大量的时间,因为我创建了这些列我对这件事大发雷霆。
file.open (filename.c_str());