2015-11-15 54 views
1

我有以下代碼:C++:錯誤:服用的地址臨時[-fpermissive]

int Array::getSize(){ 
    //do something 
} 
Movie Array::getMovie(int i){ 
    //do something 
} 

void Array::add(Movie* movie){ 
    //do something 
} 

Array& Array::operator+=(Array& movies){ 
    for (int i = 0; i < movies.getSize(); i++){ 
    add(&movies.getMovie(i)); 
    } 
    return *this; 

} 

+ =操作增加了moviesthis收集 每一個元素當我編譯我的程序我得到這個錯誤消息:

Array.cc:40:29: error: taking address of temporary [-fpermissive] 

    add(&movies.getMovie(i)); 

         ^

有什麼建議嗎?

+0

* + =操作符將電影的每個元素添加到此集合* - 您的'+ ='不*執行此操作。如果確實如此,添加的函數會有一個類似於此的原型:'add(Movie&movie)'。 – PaulMcKenzie

+0

將'&&與臨時對象一起使用是不合法的。但是,除非您顯示'add'函數中的內容並顯示您通常如何調用'add'函數,否則沒有人會提出修復建議。如果該函數添加指針而不是從指向位置進行復制,那將會非常糟糕。解決方案將涉及更改'add'或'getMovie'函數是否一致,它們應該都具有值語義或者都具有指針語義。 –

回答

0

getMovie方法返回一個對象。當您調用getMovie時,會創建一個臨時對象作爲返回。對這個臨時對象的引用不是你想要的,因爲該對象在for循環體的末尾被銷燬。 解決方法是在getMovie(使用new)中創建一個對象,並將指針返回給新對象。將此對象指針添加到數組。當數組不再需要時,刪除數組中的項目。