一个map输入输出的问题,很奇怪的,请高手来分析一下!!(50)

lejiangyuan 2003-09-09 07:17:23
//transbranch.cpp
struct Translinepara{
CORBA::Float ratedmva;
CORBA::Float ratedvol1;
CORBA::Float ratedvol2;
CORBA::Float rt;
CORBA::Float xt;
CORBA::Float k;
};
typedef std::map<unsigned short,Translinepara> TranslineMap;
//-------------------
static TranslineMap trans_map;
extern "C"
int Transline_get( unsigned short id,
const char* attr,
CORBA::Float value)

{
TranslineMap::iterator pos=trans_map.find(id);
if(pos==trans_map.end())
return -1;
if(strcmp(attr,"ratedmva")==0){
value=pos->second.ratedmva;
}else if(strcmp(attr,"ratedvol1")==0){
value=pos->second.ratedvol1;
}else if(strcmp(attr,"ratedvol2")==0){
value=pos->second.ratedvol2;
}else if(strcmp(attr,"rt")==0){
value=pos->second.rt;
}else if(strcmp(attr,"xt")==0){
value=pos->second.xt;
}else if(strcmp(attr,"k")==0){
value=pos->second.k;
}else {
return -1;
}
return 0;
}

//-----------------------
extern "C"
int Transline_set( unsigned short id,
const char* attr,
CORBA::Float value)
{
TranslineMap::iterator pos=trans_map.find(id);
if(pos==trans_map.end())
return -1;
if(strcmp(attr,"ratedmva")==0){
pos->second.ratedmva=value;
}else if(strcmp(attr,"ratedvol1")==0){
pos->second.ratedvol1=value;
}else if(strcmp(attr,"ratedvol2")==0){
pos->second.ratedvol2=value;
}else if(strcmp(attr,"rt")==0){
pos->second.rt=value;
}else if(strcmp(attr,"xt")==0){
pos->second.xt=value;
}else if(strcmp(attr,"k")==0){
pos->second.k=value;
}else{
return -1;
}
return 0;
}

.............................................

POWERSYSTEM::ResistanceType Translinebranch_impl::rt()
{
CORBA::Float temp;
assert(Transline_get(branch_no,"rt",temp)==0);
return temp;
}
void Translinebranch_impl::rt(POWERSYSTEM::ResistanceType new_rt)
{
extern Powernet_impl* powernet_ctrl;
assert(Transline_set(branch_no, "rt",new_rt)==0);
assert(
powernet_ctrl->set_branchinfo(branch_no,from_busno,
-to_busno,"r_para",new_rt)==0);
}
//////////////////////////////

客户端执行tran1(0.00321)
.................
cout<<tran1()<<endl;

输出的不是0.00321,而是-1.07374e+008
不管设置什么数,都是输出-1.07374e+008,
如果在rt()中初始化temp=0.01,则输出0.01
请问在哪里出毛病了呢?


...全文
83 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jyfcsdn 2003-09-12
  • 打赏
  • 举报
回复
传递指针和传递引用本质一样就是传入的参数就是本体,你对该参数进行操作就等于对外面实参的改变。
值传地就不同了,参数是在你函数内部的一个拷贝,你对该参数的操作只是对拷贝的操作,绝对不会对实参有任何改变。
lejiangyuan 2003-09-12
  • 打赏
  • 举报
回复
其实我先是用传指针的方式,然后用memcpy,是行!
当我就想知道为什么只能这样?
jyfcsdn 2003-09-12
  • 打赏
  • 举报
回复
还没结束?
jyfcsdn 2003-09-12
  • 打赏
  • 举报
回复
按照你原来的Transline_get的定义,temp是传值的,所以在Transline_get内部,会有temp的一个拷贝,到函数运行完毕,该拷贝就西沟掉了,对temp毫无影响。所以temp运来是什么值,现在还是什么值。

POWERSYSTEM::ResistanceType Translinebranch_impl::rt()
{
CORBA::Float temp;
assert(Transline_get(branch_no,"rt",temp)==0);
return temp;
}
jyfcsdn 2003-09-09
  • 打赏
  • 举报
回复
函数定义有问题
Transline_get( unsigned short id,
const char* attr,
CORBA::Float& value);//你这里要传reference,&

或者


可能是assert的关系,assert只在Debug版本中有作用,在release版本中没有任何操作
你编译使用的是Debug,还是Release查一下

24,855

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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