2011-06-15 78 views
2

在下面我得到錯誤作爲錯誤:在'* it'中的成員'get_id'的請求,它是非類類型'const Param * const'。什麼是用括號下面的代碼C++編譯錯誤非類類型

bool SomeParams::is_default(int _id) const 
{ 
     vector<const Param*> param_list; 
     bool is_default = false; 

     if(get_default_params(param_list)) // This populates param_list 
     { 
       vector<const Param*>::const_iterator it = param_list.begin(); 

       for(;it!=param_list.end();++it) 
       { 
         if(*it->get_id() == _id) // get_id is function in Param object 
         { 
           is_default = true; 
           break; 
         } 
       } 
     } 

     return is_default; 
} 

回答

4

包圍*it問題:(*it)->get_id()

+1

它的工作..我試過它發佈之前,它沒有工作的問題..可能是你的話有一些神奇:) – Poorna 2011-06-15 16:38:35

4

->(即成員訪問運算符)的Precendece高於*(即間接運算符),所以

*it->get_id(); 

被解釋爲:

*(it->get_id()); 

這會導致編譯錯誤。

你需要的是這樣的:

(*it)->get_id(); 

參見下表:


兩個要點:

  • 該函數的參數名稱以_開頭,該名稱根據語言規範調用未定義的行爲。名稱以下劃線保留。不要使用它們。

  • 函數的名字是is_default,函數內部有一個變量,也是is_default。你爲什麼不爲變量選擇不同的名字?這會增加你的代碼的可讀性。

+2

+1,比我更詳細。 :-) – 2011-06-15 16:41:13

+0

我認爲雙下劃線是保留的。在out項目中,single _保留用於函數參數。關於功能名稱是的,我必須改變它們 – Poorna 2011-06-16 04:58:15