此函数如何返回多值?

hellodudu 2007-05-05 08:56:40
RT
BiThrNode *InThreading(BiThrNode *BiTree, BiThrNode *pre)
这个函数的返回值是BiTree 我希望能在函数执行过程中pre的值也随之改变
当然不推荐用全局变量 通过引用能改变第二个参数的值吗?如何 谢谢
...全文
470 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
hellodudu 2007-05-05
  • 打赏
  • 举报
回复
好像还是不行
xiangbo_x 2007-05-05
  • 打赏
  • 举报
回复
我觉得这两句是将Pre当成二级指针来用了.
if(!(*pre->rchild))
{
*pre->RTag = Thread;
*pre->rchild = BiTree;
}
所以要么在声明时写void InThreading(BiThrNode *BiTree, BiThrNode **pre)
要么将其改为:

if(!(*pre->rchild))
{
pre->RTag = Thread;
pre->rchild = BiTree;
}

hellodudu 2007-05-05
  • 打赏
  • 举报
回复
555555~~~~~~
hellodudu 2007-05-05
  • 打赏
  • 举报
回复
还是一样的报错
主函数调用时cannot convert parameter 2 from 'struct BiThrNode ** ' to 'struct BiThrNode *'

如果把函数声明的地方改成void InThreading(BiThrNode *BiTree, BiThrNode **pre)
的话这条错会削除
但是函数中的*pre指向的不是结构体了
yutaooo 2007-05-05
  • 打赏
  • 举报
回复
BiThrNode *InThreading(BiThrNode *BiTree, BiThrNode * & pre)


这样子,再实验下。
hellodudu 2007-05-05
  • 打赏
  • 举报
回复
我的函数是这样的
BiTree 和 pre 都是指向一个结构体的指针
void InThreading(BiThrNode *BiTree, BiThrNode *pre)
{
if(BiTree)
{
if(!BiTree->lchild)
{
BiTree->LTag = Thread;
BiTree->lchild = *pre;
}
if(!(*pre->rchild))
{
*pre->RTag = Thread;
*pre->rchild = BiTree;
}
}
}

主函数中调用时引用
void main()
{
InThreading(BiTree,&pre);
}

可编译时却报错:
D:\Program Files\Microsoft Visual Studio\MyProjects\Date Struct\test\test.cpp(40) : error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'struct BiThrNode' (or there is no acceptable conversion)
D:\Program Files\Microsoft Visual Studio\MyProjects\Date Struct\test\test.cpp(42) : error C2675: unary '!' : 'struct BiThrNode' does not define this operator or a conversion to a type acceptable to the predefined operator
D:\Program Files\Microsoft Visual Studio\MyProjects\Date Struct\test\test.cpp(44) : error C2100: illegal indirection
D:\Program Files\Microsoft Visual Studio\MyProjects\Date Struct\test\test.cpp(45) : error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'struct BiThrNode *' (or there is no acceptable conversion)
D:\Program Files\Microsoft Visual Studio\MyProjects\Date Struct\test\test.cpp(100) : error C2664: 'InThreading' : cannot convert parameter 2 from 'struct BiThrNode ** ' to 'struct BiThrNode *'
Types pointed to are unrelated; conversion requires reinterpret_cast, C-style cast or function-style cast
Error executing cl.exe.

test.obj - 5 error(s), 0 warning(s)
  • 打赏
  • 举报
回复
pre可以使用指针的引用形势
可以用std::pair返回两个值
believefym 2007-05-05
  • 打赏
  • 举报
回复
注明
believefym 2007-05-05
  • 打赏
  • 举报
回复
c++里很多情况都是通过传递变量的指针或引用用来直接修改或者接收数据
msdn上关于函数的说明,有些参数列表上就是柱面[in],[out],分别表示该参数是作输入、输出
believefym 2007-05-05
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

void change(int* in,int *out)
{
*out = *in;
}
int main()
{
int a=1,b=2;
change(&a,&b);
cout<<a<<"\t"<<b<<endl;
cin.get();
return 0;
}
hellodudu 2007-05-05
  • 打赏
  • 举报
回复
谢楼上的
引用已经搞定
可是使用二级指针还是有问题
你的意思是不是这样用:
BiThrNode *InThreading(BiThrNode *BiTree, BiThrNode **pre)
{
*pre->... = ...;
}

在主函数中调用语句 BiTree = InThreading(BiTree,&pre);

但是编译时报错 说是*pre->没有指向的结构体(pre是指向一个结构体的指针)
windowsxp0925 2007-05-05
  • 打赏
  • 举报
回复
这个问题可以用两种方法来解决。
一个是二级指针,一个是引用。
二级指针方法:
BiThrNode* InThreading(BiThrNode* BiTree, BiThrNode** pre)
这样在调用InThreading函数时应传入一个BiThrNode**类型的参数。
在InThreading函数体里使用的时候应该使用*pre。

引用方法:
BiThrNode* InThreading(BiThrNode* BiTree, BiThrNode* & pre)
这样在调用InThreading函数时直接传一个BiThrNode*的参数。
在InThreading函数体里使用时直接pre。(注意引用不能为空)


hellodudu 2007-05-05
  • 打赏
  • 举报
回复
一开始我是想通过函数来返回一个BiThrNode *,然后再通过引用让*pre的也发生改变
但是我这个引用一直都报错,如果能引用成功的话,函数返不返回值都无所谓了
可以直接用void型,参数引用来改变就好了
yutaooo 2007-05-05
  • 打赏
  • 举报
回复
不对啊。你贴出来的代码跟你楼顶要办的事情好象不是一回事啊。你的函数原型到底是不是这个?

BiThrNode *InThreading(BiThrNode *BiTree, BiThrNode *pre)

你是否希望从函数返回一个BiThrNode *,并且通过参数 pre 再返回一个 ?

65,213

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧