C++ 通过引用将迭代器指向的对象传递给函数C++;
我认为我理解迭代器和寻址等,但显然不是。请参阅下面的代码,这纯粹是一个示例 我需要能够通过指针传递或引用mystructs的每个结构到MyFunc()。函数应该能够更新传递的实际结构,而不是通过复制或值 我收到编译器错误: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;
错误:无法将参数“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);
}
}