在主要方面:
void HandleAction(const RandomWriter & rw, string choice)
{
if(choice == "P")
{
string fileInput;
cout << "Change input file: " << endl;
cin >> fileInput;
rw.SetFilename(fileInput);
}
}
在RandomWriter类中:
void RandomWriter::SetFilename(string filename)
{
string text = GetFullFile(filename);
if (text != "")
{
fullText = text;
this->filename = filename;
}
/
当我尝试将fileInput作为参数传递给SetFileName时,为什么会出现此错误?
在此先感谢大家!
||=== error: passing 'const RandomWriter' as 'this' argument of 'void RandomWriter::SetFilename(std::string)' discards qualifiers [-fpermissive]|
最佳答案
在HandleAction
函数中,您说rw
是对常量RandomWriter
对象的引用。然后,您尝试在rw
对象上调用成员函数,该成员函数试图修改常量对象。这当然是不允许的,您不能修改常量对象。
因此,简单的解决方案是删除参数规范的const
部分:
void HandleAction(RandomWriter & rw, string choice) { ... }
// ^^^^^^^^^^^^^^^^^
// Note: No longer constant
在相关说明中,您可能应该使用对字符串的常量对象的引用,而不需要一直复制它们。