没有从“__wrap_iter<std::__1::vector<MenuItem *>::const_pointer>”到“__wrap_iter<std::__1::vector<MenuItem>::pointer>”的可行转换
No viable conversion from '__wrap_iter<std::__1::vector<MenuItem *>::const_pointer>' to '__wrap_iter<std::__1::vector<MenuItem>::pointer>'
我正在处理一个文件,我必须遍历对象的向量但由于某种原因我收到此错误:
No viable conversion from '__wrap_iter<std::__1::vector<MenuItem *>::const_pointer>' to '__wrap_iter<std::__1::vector<MenuItem>::pointer>'
这是导致错误的行:
for (vector<MenuItem>::iterator p = m->menuItems()->begin() ; p != m->menuItems()->end(); p++) {
我正在尝试迭代的 class 函数:
virtual const vector<MenuItem*>* menuItems() const = 0;
** 派生的 classes 处的虚函数是:
virtual const vector<MenuItem*>* menuItems() const { return nullptr; }
virtual const vector<MenuItem*>* menuItems() const { return &m_menuItems; }
编辑:
用迭代器找到我想找的东西后,我想用新找到的项来回忆这个函数(递归调用)。但是,当我尝试这样做时,我没有匹配函数调用。
函数调用是:
void listAll(const MenuItem* m)
我的方式
for (vector<MenuItem*>::const_iterator p = m->menuItems()->begin() ; p != m->menuItems()->end(); p++) {
cout << (*p)->name();
if ((*p)->menuItems() == nullptr) {
cout << endl;
}
if ((*p)->menuItems() != nullptr) {
cout << endl;
vector<MenuItem*>::const_iterator k = (*p)->menuItems()->begin();
MenuItem* mPtr = *k;
listAll(mPtr);
这里有两个问题。首先,一个带有签名的函数
const vector<MenuItem*>* menuItems() const;
(虚拟与否)returns 指向向量的 const
限定实例的指针。 begin()
和 end()
成员函数 const
-限定向量 return const_iterator
s,而不是 iterator
s。由于无法将 const_iterator
转换为 iterator
,这是一个问题。
其次,您在迭代器类型中缺少一个星号。所以正确的类型说明符应该是
vector<MenuItem*>::const_iterator p = m->menuItems()->begin(); ...
// ^ ^^^^^^
对迭代器类型使用auto
类型推导是一种常见的模式,因此您也可以这样做
for (auto p = m->menuItems()->begin() ; p != m->menuItems()->end(); p++)
{ /* ... */ }
我正在处理一个文件,我必须遍历对象的向量但由于某种原因我收到此错误:
No viable conversion from '__wrap_iter<std::__1::vector<MenuItem *>::const_pointer>' to '__wrap_iter<std::__1::vector<MenuItem>::pointer>'
这是导致错误的行:
for (vector<MenuItem>::iterator p = m->menuItems()->begin() ; p != m->menuItems()->end(); p++) {
我正在尝试迭代的 class 函数:
virtual const vector<MenuItem*>* menuItems() const = 0;
** 派生的 classes 处的虚函数是:
virtual const vector<MenuItem*>* menuItems() const { return nullptr; }
virtual const vector<MenuItem*>* menuItems() const { return &m_menuItems; }
编辑:
用迭代器找到我想找的东西后,我想用新找到的项来回忆这个函数(递归调用)。但是,当我尝试这样做时,我没有匹配函数调用。 函数调用是:
void listAll(const MenuItem* m)
我的方式
for (vector<MenuItem*>::const_iterator p = m->menuItems()->begin() ; p != m->menuItems()->end(); p++) {
cout << (*p)->name();
if ((*p)->menuItems() == nullptr) {
cout << endl;
}
if ((*p)->menuItems() != nullptr) {
cout << endl;
vector<MenuItem*>::const_iterator k = (*p)->menuItems()->begin();
MenuItem* mPtr = *k;
listAll(mPtr);
这里有两个问题。首先,一个带有签名的函数
const vector<MenuItem*>* menuItems() const;
(虚拟与否)returns 指向向量的 const
限定实例的指针。 begin()
和 end()
成员函数 const
-限定向量 return const_iterator
s,而不是 iterator
s。由于无法将 const_iterator
转换为 iterator
,这是一个问题。
其次,您在迭代器类型中缺少一个星号。所以正确的类型说明符应该是
vector<MenuItem*>::const_iterator p = m->menuItems()->begin(); ...
// ^ ^^^^^^
对迭代器类型使用auto
类型推导是一种常见的模式,因此您也可以这样做
for (auto p = m->menuItems()->begin() ; p != m->menuItems()->end(); p++)
{ /* ... */ }