常量丢弃限定符 C++

const discards qualifiers c++

本文关键字:C++ 常量      更新时间:2023-10-16

我有一个类"Fan"具有这个功能:

string getName();

我想在类外的另一个函数中使用它:

string print(const Fan& fan) {
std::stringstream ss;
ss << "Fan : "  << fan.getName() ;
return ss.str();
}

我收到此错误:

..\mtm_ex4.cpp:37:52:错误:将'const mtm::Fan'作为'std::string mtm::Fan::getName()'的"this"参数传递[-fpermissive]放弃限定符

为什么?!


更新:

当我将其更改为:

string getName() const;

我收到此错误:

mtm::Fan::getName() const的未定义引用

您正在尝试在 const 对象上调用非常量成员函数。 只需更改功能:

string getName() const;

我会说这不是一个描述性很强的错误消息。

编辑:您需要在两个位置添加const,类中的声明和源中的定义。

您的参数fan是一个const Fan&,因此您只能以不修改它的方式使用它。您需要告诉编译器调用getName不会修改对象 - 它不会自动知道这一点。为此,您只需在getName的参数列表之后编写const

string getName() const { ... };