主要:
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]|
答案 0 :(得分:1)
在HandleAction
函数中,您说rw
是对常量 RandomWriter
对象的引用。然后尝试在试图修改常量对象的rw
对象上调用成员函数。这当然是不允许的,你不能修改常量对象。
所以简单的解决方案是删除参数规范的const
部分:
void HandleAction(RandomWriter & rw, string choice) { ... }
// ^^^^^^^^^^^^^^^^^
// Note: No longer constant
在相关的说明中,您应该使用对字符串的常量对象的引用,但不需要一直复制它们。
答案 1 :(得分:0)
您的RandomWriter
方法中rw
参数const
已宣布为HandleAction()
,因此不可变且您的通话无法更改到SetFilename()
。