2015-11-27 48 views
0

我重構了一些Qt-cpp代碼,並希望確保從公共函數獲得的一些QWidgets是const(不可更改)。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] 

的文檔上。取-鼠標懸停說:

T QHash::take(const Key &key) 

...和我傳遞一個const選項卡*爲重點,所以我不明白這個消息。 頭聲明

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

而且我想知道如果我傳遞給setTabWidget需求Tab爲const始終。

+0

很好地兼容的,'t'是一個指針,'QHash :: take'需要一個參考,所以東西得是錯的。 – Downvoter

+0

如果我在方法聲明中刪除了「const」,它就會起作用。所以傳遞指針沒有問題。 – user2366975

回答

0

一旦你delcare像const東西你不能改變它沒有metter什麼。另外,如果你在你的類中定義了一些類似於const的東西,你必須將它作爲const整個程序使用,這意味着無論如何你都不能改變它。 Reading this將幫助您瞭解const如何使用它以及何時使用它的概念。

+0

我知道。但我在哪裏更改Tab? QHash :: take不會改變它。它確實從哈希中刪除了一個指向這個Tab的指針。同樣的::插入。該標籤沒有修改,或者我錯過了什麼? – user2366975

+0

'QWidget * oldWidget = tabWidgets_.take(* t);'就像上面說的人一樣,只要去掉指針 –

1

該方法需要一個引用,並且你正在向它傳遞一個指針。只需取消指針。

​​

這是假設當然,這Tab是與關鍵

+0

請解釋爲什麼它會編譯,如果我刪除'const'。那麼它仍然是一個指針。爲什麼我需要取消引用'const Tab *',當我不需要'Tab *'時? – user2366975

+0

如何聲明tabWidgets_? – djcouchycouch

+0

QHash tabWidgets_; ...那一定是它。爲什麼我以前沒有看過那裏? – user2366975

相關問題