非常无聊,简单的问题,希望有一个简单的答案。我的问题基本上归结为函数参数的一行代码:
void className::read(const string &)
{
ifstream fin;
fin.open(fname);
/* ...function code */
fin.close()
}
输入在main中以字符串fname(即object.read(fname)
)建立。
当我这样做时,它告诉我fname尚未在此范围内声明。因此,我的问题是如何使用fname(输入)作为fin.open()中的文件名。
感谢所有已经帮助过的人,并对早先对此问题的不良解释感到抱歉。
答案 0 :(得分:1)
如果fname很好地引用了函数参数,那么因为它有一个const修饰符。所以你必须删除const修饰符。一旦完成,就像分配给任何其他变量一样。
但是,如果您想在函数中使用fname的值更简单,那么只需创建一个新变量并赋值:
std::string newVariable = fname;
答案 1 :(得分:1)
我可能会过度简化这一点,但这是你想要的吗?命名参数fname
?
void className::read(const string& fname)
{
printf(fname.c_str()); // Do what you want with the string.
}
答案 2 :(得分:1)
我不确定我理解你的问题。您是否在询问是否可以在功能中修改fname
?如果这是您想要的,您需要修改read
函数的签名以获取非const引用。
void className::read( string& fname )
{
fname = "something else"; // this change is visible even after the
// function returns
}
或者您是否在询问如何创建一个本地字符串,该字符串是fname
的副本?
void className::read( const string& fname )
{
std::string local = fname; // local contains a copy of fname
}