2015-01-02 27 views
-3

如果我從ccfoo調用SetCFoo,它可以工作,但是從迭代器(在循環中)它不工作。無效值不應被忽略,因爲它應該是。通過來自迭代器的方法設置對指針成員的引用

class CFoo{}; 

class CCFoo 
{ 
public: 
    CFoo *m_cf; 
    void SetCFoo(CFoo *cf) 
    { 
     m_cf = cf; 
    } 
}; 

int main() 
{ 
    CCFoo ccfoo; 
    CFoo cfoo; 

    //ccfoo.SetCFoo(&cfoo); <-- It works 

    vector<CCFoo> v1; 
    v1.assign(5,*new CCFoo); // I don't care about leak because it is example 

    for(vector<CCFoo>::iterator it = v1.begin(); it != v1.end(); it++) 
    { 
     *it->SetCFoo(&cfoo); 
    } 
} 

編譯器給我以下錯誤: 不被忽略,因爲它應該是

+2

嘗試'它 - > SetCFoo(&cfoo);' –

+3

如何在不工作?如果編譯器給你一個錯誤消息,則需要**編輯您的文章**,包括它。如果它是一個運行時錯誤,我們 –

+0

Ok。Error was included in topic。 – qtreez

回答

2
*it->SetCFoo(&cfoo); 

空值是一樣的

*(it->SetCFoo(&cfoo)); 

你需要的是:

(*it).SetCFoo(&cfoo); 
不僅不需要

或只是

it->SetCFoo(&cfoo); 

*在語句的開始,但它會導致編譯器錯誤,因爲你不能對CCFoo::SetCFoo()返回值,這是適用的一元*操作請輸入void

+0

是不是'它已經是'CFoo'的迭代器? –

+0

也許'(* it).SetCFoo(&cfoo);'? – qtreez

+4

呃。只是狀態它:'it-> SetCFoo(...)'。*是完全無關的,沒有必要(*尷尬) – sehe

相關問題