gpt4 book ai didi

c++ - 如果表示为迭代器,则更改 C++ 类指针

转载 作者:行者123 更新时间:2023-11-30 05:38:20 25 4
gpt4 key购买 nike

假设我定义了两个类:

namespace DecaveNamespace {
class MyElt1 {
public:
list<MyElt2>::iterator elt2;
}

class MyElt2 {
public:
list<MyElt1>iterator elt1;
}
}

换句话说,出于所有意图和目的,每个类都有一个指向另一个类的元素的指针,该元素被封装为迭代器。

现在,假设我在某处的某个函数中执行了一些逻辑,并且我想更新 MyElt1 中的指针以指向类 MyElt2 的另一个实例。换句话说:

// ... some logic
MyElt1 some_elt_1 = some_logic();
MyElt2 some_elt_2 = some_logic_2();

some_elt_1.elt2 = &some_elt_2;

如果我尝试执行上述操作,则会出现上述编译器错误:

/usr/include/c++/4.8.2/bits/stl_list.h:125:12: note:   no known conversion for argument 1 from ‘DecaveNamespace::MyElt2*’ to ‘std::_List_iterator<DecaveNamespace::MyElt2>&&’

很明显,问题是我将错误的地址传回给迭代器的引用。但是,我该如何更新 MyElt1 的指针以指向新对象?

最佳答案

根据定义,列表迭代器是指向列表的迭代器。它只能指向列表拥有的对象。您唯一的选择是将对象放入列表中,以便您可以获得指向它的迭代器。

如果该对象已经在列表中,请在列表中找到它,以便返回指向它的迭代器。请注意,在类中存储迭代器是危险的,因为列表上的许多操作会使迭代器对其无效。

关于c++ - 如果表示为迭代器,则更改 C++ 类指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32830908/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com