C++ 从函数参数const string(&;)设置值
非常简单的问题,希望有一个简单的答案。我的问题基本上归结为函数参数上的一行代码,即:C++ 从函数参数const string(&;)设置值,c++,C++,非常简单的问题,希望有一个简单的答案。我的问题基本上归结为函数参数上的一行代码,即: void className::read(const string &) { ifstream fin; fin.open(fname); /* ...function code */ fin.close() } 输入在main中建立为字符串fname(即object.read(fname))。 当我这样做时,它告诉我fname没有在这个范围内声明。因此,我的问题是如何使用输入fnam
void className::read(const string &)
{
ifstream fin;
fin.open(fname);
/* ...function code */
fin.close()
}
输入在main中建立为字符串fname(即object.read(fname)
)。
当我这样做时,它告诉我fname没有在这个范围内声明。因此,我的问题是如何使用输入fname作为fin.open()中的文件名。
感谢所有已经帮助过你的人,并为早些时候对这个问题的拙劣解释感到抱歉 如果fname很好地引用了函数参数,您可以这样做,因为它有一个常量修饰符。因此,您必须删除常量修饰符。一旦这样做了,它就像分配给任何其他变量 然而,如果您想在函数中使用fname的值,那就更简单了,您只需创建一个新变量并分配它:
std::string newVariable = fname;
我可能过于简单化了,但这是你想要的吗?
fname
的命名参数
void className::read(const string& fname)
{
printf(fname.c_str()); // Do what you want with the string.
}
void className::read( const string& fname )
{
std::string local = fname; // local contains a copy of fname
}
我不确定我是否理解你的问题。您是否询问是否可以在函数中修改
fname
?如果这是您想要的,您需要修改read
函数的签名,以获取非常量引用
void className::read( string& fname )
{
fname = "something else"; // this change is visible even after the
// function returns
}
或者您正在询问如何创建作为fname
副本的本地字符串
void className::read(const string& fname)
{
printf(fname.c_str()); // Do what you want with the string.
}
void className::read( const string& fname )
{
std::string local = fname; // local contains a copy of fname
}
你的意思是像
std::string str=fname代码>或std::string str。。。str=fname
听起来就是这样,但感觉好像不止这些。为了让这更清楚,也许您还可以添加main()
函数的相关部分,并展示如何调用className::read()
。不幸的是,这不是一个选项。让我更具体一点。我必须获取值fname并将其用于ifstreamObject.open(fname)。实际上,我可能不需要在函数中设置等于fname的字符串,但我确实需要从内存中调用fname。希望这会有所帮助,应该早些时候更具体。@zetametroid,该调用在C++11中运行良好。在C++03中,需要.open(fname.C_str())你的问题有点误导人。如果你需要修改变量,你可以直接在函数中使用它,制作一个本地副本(我用和示例编辑了我的答案)。是的,我想我把问题处理错了,没有足够的信息,很抱歉,编辑以更正。谢谢你的帮助。