任何人都可以向我解释为什么下面的段编译,但后面的注释行不?将矢量迭代器传递给函数C++
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
不?从逻辑上讲,它们是一样的,不是吗?
因为不意味着解除引用而且&意味着通过引用又意味着彼此抵消掉?
函数需要一个指向'tObj'的指针,你传递一个迭代器。一个迭代器不是一个指针(尽管一些实现*可能*将'vector :: iterator'实现为'T *'。) –
juanchopanza
2014-10-07 07:22:35