請考慮以下幾點:錯誤推回參考常量向量的元素
// from main file
// first arguement gets enc_array
Rock rock (voice.getEncArray());
// getEncArray() gets a vector of vectors:
// std::vector<std::vector<unsigned int> > enc_array;
// in rock.hpp file, consider members
Rock(const std::vector<std::vector<unsigned int> > &);
std::vector<std::vector<unsigned int> * > remaining;
const std::vector<std::vector<unsigned int> > * population;
// in rock.cpp
Rock::Rock (const vector<vector<unsigned int> > & v) :
population (&v),
....
// in one of the class member functions
for (vector<vector<unsigned int> >::const_iterator ci = population->begin(); ci != population->end(); ++ci) {
// for some indexes...
remaining.push_back (& (*ci)); // <------ PROBLEM
}
GCC報道:
error: no matching function for call to 'std::vector<std::vector<unsigned int>*>::push_back(const std::vector<unsigned int>*)'
note: void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = std::vector<unsigned int>*; _Alloc = std::allocator<std::vector<unsigned int>*>; std::vector<_Tp, _Alloc>::value_type = std::vector<unsigned int>*] <near match>
note: no known conversion for argument 1 from 'const std::vector<unsigned int>*' to 'std::vector<unsigned int>* const&'
我明白,我試圖把被認爲的vector<int>
地址const
轉換爲非const vector
。 在remaining
被填滿之後,沒有其他方法會更改其數據,因此實際上它應該是const
。 但我無法將remaining
聲明爲const vector
,因爲它會給出錯誤。
error: no matching function for call to 'std::vector<std::vector<unsigned int>*>::push_back(const std::vector<unsigned int>*) const'
note: candidate is:
note: void std::vector<_Tp, _Alloc>::push_back(const value_type&) [with _Tp = std::vector<unsigned int>*; _Alloc = std::allocator<std::vector<unsigned int>*>; std::vector<_Tp, _Alloc>::value_type = std::vector<unsigned int>*] <near match>
note: no known conversion for argument 1 from 'const std::vector<unsigned int>*' to 'std::vector<unsigned int>* const&'
我真的需要從元素複製到remaining
?或者還有什麼我可以做的,爲了不有這種開銷?
嘗試'iterator',而不是'const_iterator'。 – Synxis
@Synxis:不可能,因爲'population'被定義爲'const'(轉換問題...) – Luis