【问题标题】:C++ discards qualifiersC++ 丢弃限定符
【发布时间】:2014-02-07 00:36:33
【问题描述】:

我有这个错误:

BSPArduino.cpp:316:错误:将“const BSPArduino”作为“this”传递 'virtual void BSPArduino::enableWdt(const) 的参数 WATCHDOG_TIMER_DELAY&, const ___bool&)' 丢弃限定符

这个方法是这样定义的:

void BSPArduino::enableWdt(const WATCHDOG_TIMER_DELAY &delay, const ___bool &enable)

我想这样称呼它:

enableWdt(this->watchdogTimer, ___false);

与:

WATCHDOG_TIMER_DELAY watchdogTimer;

我不明白为什么会出现这个构建错误...

非常感谢您的帮助

安东尼

【问题讨论】:

  • 调用上下文是 const (eg void f() const { ... } )
  • 您正在使用一个 const 对象调用非常量方法。
  • Anthony:您已经 6 年没有接受任何答案,如果您需要更多解释,请更新问题以包含调用 BSPArduino::enableWdt 的函数的定义,否则,请阅读 @ 987654321@

标签: c++ qualifiers


【解决方案1】:

BSPArduino::enableWdt() 是一个非常量方法。如果您尝试从 const 调用非 const 方法,则会收到此错误。

本质上,错误是试图告诉您您正在丢弃“this”的常量。

【讨论】:

  • 今天的关键词是...... constness!常用于描述对const correctness 的遵守情况。
【解决方案2】:

您正试图从const 成员函数调用非const 函数;这是不允许的。

如果可能,将const 限定符添加到enableWdt。如果这是不可能的(因为它修改了对象),那么您必须从调用函数中删除 const 限定符,或者重组代码以便从其他地方调用 enableWdt

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多