2013-10-07 59 views
0

所以,可以說我有一個矢量,vector<Item*> vItem和一個帶有成員函數Item::setValue();的Item類。讓我們也說我通過使用vItem.push_back(new Item)填充該矢量。從指針向量訪問成員函數? C++

現在,要訪問該成員函數,通過向量中的指針,將vItem[0]->setValue("key");。有效嗎?我認爲這是,但是當我cout成員變量使用getValue()函數,沒有新的返回,只有來自我的構造函數的默認值。

任何想法?我覺得在我的邏輯中這是一個愚蠢的錯誤,但我不確定。任何幫助將不勝感激。

EDITS:

的setValue代碼:

void Item::setValue(string sValue) 
{ 
     m_sValue = sValue; 
} 

與私有變量:

string m_sValue; 

的getValue代碼:

string Item::getValue() 
{ 
    return m_sValue; 
} 

代碼的簡單版本:

void func2(vector<Item*>& vItem) 
{ 
    vItem.push_back(new Item); 
    vItem[0]->setValue("key"); 
} 

int main(int argc, char * argv[]) 
{ 
    vector<Item*> vItem; 
    func2(vItem); 
    cout << vItem[0]->getValue() << endl; 

    return 0; 
}  

我還應該注意:一切都編譯得很好(g ++使用C++ 0x標準),但是setter只是沒有設置。

+1

您的描述聽起來正確。你能發佈setValue代碼嗎? – billz

+0

嘗試將其簡化爲大約10行代碼,顯示插入,對setValue的調用,所有對getValue的調用,Item的代碼以及您看到的行爲。以這種方式幫助發現問題會容易得多。 –

+0

@billz添加了setValue代碼。也要添加一個簡單的版本。 – Nick

回答

0

您的getValue返回一個void,並且在您實現該方法後,出現了getValue()之外的分號分號。更改爲string Item::getValue(){return m_sValue;}

+0

我的歉意,我在這裏意外地將它設置爲無效。我確實在真實程序中將它設置爲一個字符串。雖然 – Nick

+0

感謝您仍然有一個分號。 'string Item :: getValue();' – czifro

+0

好的接收,謝謝 – Nick