const丢弃限定符c ++

时间:2014-01-19 21:43:42

标签: c++ const

我有一个具有此功能的“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

的未定义引用

2 个答案:

答案 0 :(得分:7)

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

string getName() const;

我会说这不是一个非常具有描述性的错误信息。

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

答案 1 :(得分:2)

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

的参数列表后面写getName
string getName() const { ... };