2011-02-24 140 views
1

我试图使用从矢量检索到的字符串将文件名传递给ifstream以便打开。试图将字符串传递给std :: ifstream作为参数

vector<string> files; 

//Populate vector 

std::ifstream ifile(files[0] ,std::ios::binary); 

在编译时这将返回:

错误:没有匹配函数调用“的std :: basic_ifstream> :: basic_ifstream(性病:: basic_string的,性病::分配器> &,常量的std :: _Ios_Openmode &)*

如果我尝试转换文件[0]为const char *第一

vector<string> files; 

std::string l = files[0]; 
const char *p; 
p = l.c_str(); 
std::ifstream ifile(p ,std::ios::binary); 

编译器回报:

错误:'l'未在此范围内声明

我在这做错了什么?这是基本的,我敢肯定,这很明显。

+1

我不重现你的第二个问题(剪切和粘贴代码,并添加什么是明显缺失的)。顺便说一句,你也可以使用'file [0] .c_str()'而不是p。 – AProgrammer 2011-02-24 13:52:43

回答

1

试试这个:

std::ifstream ifile(files[0].c_str(), std::ios::binary); 
+0

这是有效的,但是现在的代码现在抱怨ifile没有在这个范围内声明。 if(!ifile.good()) { return 1; } – zib24 2011-02-24 14:02:04

+0

请注意,您应该也许正在检查矢量是否为空,否则'files [0]'可能会导致运行时错误或异常。 – icabod 2011-02-24 14:03:46

+0

我是一个完全白痴,并没有写完if语句,现在一切正常,谢谢! – zib24 2011-02-24 14:06:30

相关问题