Const参数传递:无效转换

时间:2015-11-27 19:34:03

标签: c++ qt const

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

// 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]

文档说明.take-mouseover:

T QHash::take(const Key &key)

...我正在传递一个const Tab *作为键,所以我不明白这个消息。 标头声明是

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

此外,我想知道我传递给Tab的{​​{1}}是否需要始终为常量。

2 个答案:

答案 0 :(得分:1)

该方法需要引用,并且您将指针传递给它。只需取消引用指针即可。

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

这当然假设Tab与Key

兼容

答案 1 :(得分:0)

一旦你将某件事作为const,你就无法改变它。另外,如果你在类中定义一些const作为const,你必须将它用作const整个程序,这意味着无论如何你都无法改变它。Reading this将帮助你理解const的概念如何使用它以及何时使用它。