任何人都可以向我解釋爲什麼下面的段編譯,但後面的註釋行不?將矢量迭代器傳遞給函數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