无法为迭代器分配没有可行的重载'='错误

时间:2015-03-15 22:09:28

标签: c++ stl unique-ptr

我有一个字段定义为

const vector<record>* data;

其中记录定义为

const unique_ptr<vector<float>> features;
const float label;

在我的主要代码中,我使用

vector<record>::iterator iter = data->begin()

编译器对我的代码不满意,没有可行的重载&#39; =&#39;迭代器分配行的错误。它也会产生这个警告:

/Library/Developer/CommandLineTools/usr/bin/../include/c++/v1/iterator:1097:7: note: candidate function (the implicit copy assignment operator) not viable: no known conversion from '__wrap_iter<const_pointer>' to 'const __wrap_iter<class MLx::Example *>' for 1st argument

我做错了什么?

1 个答案:

答案 0 :(得分:5)

  

“迭代器应该是轻量级的,现在应该拥有数据,即在进行分配时不应该尝试复制甚至触摸记录。”

它与拥有数据data中存储的数据的迭代器无关,但const unique_ptr<>仅限制访问模板参数类型为{{1}实例。
这意味着你需要使用

const

在您的主要代码中。

这很像写作

vector<record>::const_iterator iter = data->begin();
             // ^^^^^^

正如他在评论中提到的@Jonathan Potter

const vector<record>* data;

应该也可以。