Const参数传递:转换无效

Const parameter passing: invalid conversion

本文关键字:无效 转换 参数传递 Const      更新时间:2023-10-16

我正在重构一些Qt-cpp代码,并希望确保从公共函数中获得的一些QWidget是常量(不可更改)。

// class Tabbar:
const Tab* activeTab(){
    return this->activeTab;  // do I need a const here?
}
// class Tabwidget (Tabbar with stacked widget):
void TabWidget::setTabWidget(const Tab2* t,
                             QWidget *w, bool switchToTab)
{
    QWidget* oldWidget = tabWidgets_.take(t);    // <-- error
    if (oldWidget){
        stackedWidget_->removeWidget(oldWidget);
        delete oldWidget;
    }
    tabWidgets_.insert(t,w);                     // <-- error
    stackedWidget_->addWidget(w);
    // ...
}

错误为:

invalid conversion from "const Tab*" to "Tab*" [-fpermissive]

文件上写着。接管鼠标:

T QHash::take(const Key &key)

并且我正在传递一个const Tab*作为键,所以我不理解该消息。标头声明为

void setTabWidget(const Tab *t, QWidget* w, bool switchToTab = false);

此外,我想知道我传递给setTabWidgetTab是否需要始终为常量。

该方法需要一个引用,而您正在向它传递一个指针。只是取消引用指针。

QWidget* oldWidget = tabWidgets_.take(*t);

这当然是假设Tab与Key 兼容

一旦你将某个东西命名为const,你无论如何都无法更改它。此外,如果您将类中的某些内容定义为const,则必须将其用作const整个程序,这意味着无论怎样都无法更改它。阅读这篇文章将帮助您理解const的概念——如何使用它以及何时使用它