将“const”作为“this”参数传递时出错
Posted
技术标签:
【中文标题】将“const”作为“this”参数传递时出错【英文标题】:error passing 'const' as 'this' argument 【发布时间】:2014-01-15 21:41:06 【问题描述】:我一直被困在一个错误上,以下,我正在学习,我想我不明白这个错误。
droid.cpp: In function ‘std::ostream& operator<<(std::ostream&, const Droid&)’:
droid.cpp:94:30: error: passing ‘const Droid’ as ‘this’ argument of ‘std::string
Droid::getId()’ discards qualifiers
[-fpermissive]
第 94 行:
std::ostream& operator<<(std::ostream &os, Droid const & a)
os << "Droid '" << a.getId() << "', " << *a.getStatus() << ", " << a.getEnergy() << std::endl;
和听众:
std::string getId();
对于“operator
有人能解释一下编译器在说什么吗?
【问题讨论】:
【参考方案1】:您需要将该方法设置为const
,以便可以在const
实例上或通过const
引用调用它:
std::string getId() const;
^^^^^
这同样适用于在std::ostream& operator<<(std::ostream &os, Droid const & a)
中调用的所有Droid
方法。
您还需要在方法的定义中添加const
。
【讨论】:
@juanchopanza 你介意提一下它是怎么称呼的吗?我想了解为什么我需要在引用时明确声明const
。【参考方案2】:
您需要std::string getId() const;
。否则,编译器会认为getId()
可能会更改实例,而您不能在const Droid&
上执行此操作。 getStatus()
和 getEnergy()
也一样。
【讨论】:
以上是关于将“const”作为“this”参数传递时出错的主要内容,如果未能解决你的问题,请参考以下文章
C++ Boost - 序列化错误 - 将“const B”作为“this”参数传递会丢弃限定符
错误:将“const SunscreenSPF”作为“this”参数传递会丢弃限定符问题
C++ 错误 - 将 'const Dataset<double>' 作为 'this' 参数传递会丢弃限定符 [-fpermissive]
std::remove_if 将“const type”作为“this”参数传递会丢弃 linux 上的限定符 [重复]
将“const std::map<int, bool>”作为“this”参数传递会丢弃 lambda 函数中的限定符 [-fpermissive]