Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/143.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++ 从函数参数const string(&;)设置值_C++ - Fatal编程技术网

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())