gpt4 book ai didi

c++ - 将 vector 迭代器传递给函数 C++

转载 作者:太空狗 更新时间:2023-10-29 23:50:51 25 4
gpt4 key购买 nike

谁能向我解释为什么下面的片段可以编译但后面的注释行没有编译?

struct tObj
{
int data;
int moreData;
}

...

void funcToCall (tObj *obj, int moreData)
{
//Useful stuff here
}

void mainFunction ()
{
vector<tObj>::iterator it = vectorOfObjects.begin(); //assumes vectorOfObjects is already defined
while (it != vectorOfObjects.end())
{
funcToCall (&(*it), 0); //This line works
funcToCall (it, 0); //This line produces an error
it++;
}
}

产生的错误是这样的:

error: cannot convert ‘std::vector<tObj>::iterator {aka __gnu_cxx::__normal_iterator<tObj*, std::vector<tObj> >}’ to ‘tObj*’

关于为什么 &(*it) 有效但只是简单的 it 无效的任何想法?从逻辑上讲,它们是相同的,不是吗?

因为 * 不是意味着取消引用而 & 不是意味着通过引用传递也就是相互抵消吗?

最佳答案

it是一个迭代器对象,按原样传递它意味着您正在尝试传递类型为 vector<tObj>::iterator 的对象对于期望 tObj* 的函数,因此错误。

当你做 *it当你应用 & 时,你会得到迭代器代表的底层对象。最重要的是,您将获得 对象的地址,类型为tObj*。这与函数的参数类型一致,因此没有错误。

关于c++ - 将 vector 迭代器传递给函数 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26230592/

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