Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/138.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 通过引用将迭代器指向的对象传递给函数C++;_C++_Iterator_Parameter Passing_Pass By Reference_Pass By Pointer - Fatal编程技术网

C++ 通过引用将迭代器指向的对象传递给函数C++;

C++ 通过引用将迭代器指向的对象传递给函数C++;,c++,iterator,parameter-passing,pass-by-reference,pass-by-pointer,C++,Iterator,Parameter Passing,Pass By Reference,Pass By Pointer,我认为我理解迭代器和寻址等,但显然不是。请参阅下面的代码,这纯粹是一个示例 我需要能够通过指针传递或引用mystructs的每个结构到MyFunc()。函数应该能够更新传递的实际结构,而不是通过复制或值 我收到编译器错误: 错误:无法将参数“1”的“MY_STRUCT”转换为“MY_STRUCT*”,将其转换为“void MyFunc(MY_STRUCT*)” 如果我只是传递迭代器地址,这也不起作用 正确的方法是什么。提前谢谢 typedef struct { int var1;

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

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

我收到编译器错误:

错误:无法将参数“1”的“MY_STRUCT”转换为“MY_STRUCT*”,将其转换为“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);
}
typedef结构
{
int-var1;
int-var2;
std::字符串名;
}我的结构;
std::列出mystructs;
void MyFunc(我的结构*)
{
//做点什么
}
//用结构等填充列表。。不包括在这里
//.....
对于(std::list::iterator it=mystructs.begin();it!=mystructs.end();+it)
{
MyFunc(*it);
}

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

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


替代(也许更好的C++)是转换你的代码> MyFunc 函数,以引用而不是指针。C++中的引用引用:< /P>

void MyFunc(MY_STRUCT&)
{
    // Do something
}
因此,您的调用是正确的,您当前想要的是传递指针,您可以通过解引用迭代器(通过传递解引用对象的地址)来实现:

void MyFunc(我的结构*)
{
//做点什么
}
//用结构等填充列表。。不包括在这里
//.....
int main(){
对于(std::list::iterator it=mystructs.begin();it!=mystructs.begin();+it)
{
MyFunc(&*it);
}
}

主题外,但<代码>它!=mystructs.begin()应该是
it!=mystructs.end()
@G.M.你说得对,谢谢。。我可以让我的函数接受my_结构&,然后传递它吗。。。在这种情况下,我还会通过引用获得通过吗?谢谢你是对的。如果将参数声明为“代码> PARAM&”,则“自动调用”作为C++中的引用传递。在函数调用中,您不能看到,如果是通过值或引用直接传递的,我不喜欢C++语法中的一点。
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);
    }
}