3

我虽然我理解迭代器和寻址等,但显然不是。请参阅下面的代码,这纯粹是一个示例。

我需要能够通过指针传递或将mystructs的每个结构引用到MyFunc()。该函数应该能够更新传递的实际结构,而不是通过副本或值。

我收到编译器错误:

error: cannot convert 'MY_STRUCT' to 'MY_STRUCT*' for argument '1' to 'void MyFunc(MY_STRUCT*)'

如果我只是传递迭代器地址,这也行不通。

这样做的正确方法是什么。提前致谢。

typedef struct
{
   int var1;
   int var2;
   std::string name;

}MY_STRUCT;

std::list<MY_STRUCT> mystructs;

void MyFunc(MY_STRUCT*)
{
    // Do something
}


// populate the list with structs etc.. not included here
//.....


for (std::list<MY_STRUCT>::iterator it = mystructs.begin();it != mystructs.end(); ++it)
{
     MyFunc(*it);
}
4

2 回答 2

2

在 C++ 中通过引用传递是通过以下方式完成的:

void MyFunc(MY_STRUCT&)
{
    // Do something
}

所以您的调用是正确的,您当前想要的是传递指针,您可以通过取消引用取消引用的迭代器(通过传递取消引用的对象的地址)来做到这一点:

void MyFunc(MY_STRUCT*)
{
    // Do something
}


// populate the list with structs etc.. not included here
//.....
int main() {

    for (std::list<MY_STRUCT>::iterator it = mystructs.begin();it != mystructs.begin(); ++it)
    {
         MyFunc(&*it);
    }
}
于 2020-03-31T14:42:54.657 回答
0

您的函数需要一个指针,用于&获取某物的地址。

MyFunc(&*it);

*it返回对MY_STRUCT对象的引用,您需要使用&该引用将该引用转换为指针。这是正常的,您使用迭代器这一事实根本没有区别。

另一种选择(在 C++ 中可能更好)是将您的MyFunc函数转换为采用引用而不是指针。

于 2020-03-31T14:40:57.250 回答