我传递的引用类型,为什么第2次使用的时候,值会变?怎么把结构体数据带出来啊

火鸟33 2004-03-16 04:55:51
DB::DBData data;
DB::Key keydata;
GetDbConfig dbc;
int TaskNum;
TaskNum = dbc.GetFiles("index.conf");
if (TaskNum>0)
{
for(int i = 0;i<TaskNum;i++)
{
if (dbc.GetConf(data,i,keydata))
{
DB::DBData tmpdata = data;
DbOperate DbObj(data);


int iRec = DbObj.GetCount(data);
for (int j = 0;j<iRec;j++)
{
if (iRec>0)
{
DbObj.GetDBData(data,j);

cout << "Validating connection"<<endl;
CORBA::Short rs=db->senddata(data);
cout << rs<<endl;

};

};
};


};

};
...全文
106 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
火鸟33 2004-06-14
  • 打赏
  • 举报
回复
问题是搞清楚了,字符串,深拷贝和浅拷贝的问题
火鸟33 2004-03-19
  • 打赏
  • 举报
回复
函数体:
int GetDbConfig::GetConf(DB::DBData & datavalue,int iFileIndex,DB::Key & keyvalue)
{



char DBName[256]={0},DBServer[256]={0},DBUser[256]={0},DBPWD[256]={0},TableName[256]={0},sFieldNum[256]={0};
int iFieldNum,iKeyNum;
char sFieldName[256]={0},sFieldType[256]={0},sTmp[256]={0},sKeyNum[256]={0},sKeyName[256]={0};
const string sFieldNameItem = "FieldName";
const string sFieldTypeItem = "FieldType";
const string sKeyNName = "KeyField";

string sFieldN,sFieldT,sKeyN;

GetProfileString("Global","SrcDBName","0",DBName,255,(char*)m_sFilesName[iFileIndex].c_str());
GetProfileString("Global","SrcDBServer","0",DBServer,255,(char*)m_sFilesName[iFileIndex].c_str());
GetProfileString("Global","DBUser","0",DBUser,255,(char*)m_sFilesName[iFileIndex].c_str());
GetProfileString("Global","DBPWD","0",DBPWD,255,(char*)m_sFilesName[iFileIndex].c_str());
GetProfileString("Table","SrcTableName","0",TableName,255,(char*)m_sFilesName[iFileIndex].c_str());
GetProfileString("Table","FieldNum","0",sFieldNum,255,(char*)m_sFilesName[iFileIndex].c_str());
(datavalue).DBName = DBName;
(datavalue).DBServer = DBServer;
(datavalue).DBUser = DBUser;
(datavalue).DBPWD = DBPWD;
(datavalue).DBTable = TableName;

iFieldNum =atoi(sFieldNum);


DB::Field dbfield;

dbfield.length(iFieldNum);

for(int i=0;i<iFieldNum;i++)
{
itoa(i,sTmp,8);
sFieldN=sFieldNameItem+sTmp;
sFieldT=sFieldTypeItem+sTmp;
GetProfileString("Table",(char*)sFieldN.c_str(),"0",sFieldName,255,(char*)m_sFilesName[iFileIndex].c_str());
GetProfileString("Table",(char*)sFieldT.c_str(),"0",sFieldType,255,(char*)m_sFilesName[iFileIndex].c_str());
dbfield[i].FieldName=CORBA::string_dup(sFieldName);
dbfield[i].FieldType=CORBA::string_dup(sFieldType);
}
(datavalue).FieldData=dbfield;

GetProfileString("Table","KeyNum","1",sKeyNum,255,(char*)m_sFilesName[iFileIndex].c_str());
iKeyNum = atoi(sKeyNum);
m_vKeyValue.length(iKeyNum);
for (int i = 0;i<iKeyNum;i++)
{
itoa(i,sTmp,8);
sKeyN = sKeyNName+sTmp;
GetProfileString("Table",(char*)sKeyN.c_str(),"1",sKeyName,255,(char*)m_sFilesName[iFileIndex].c_str());
m_vKeyValue[i].Index = atoi(sKeyName) ;
}


return 1;
}
hdsunwind 2004-03-18
  • 打赏
  • 举报
回复
问题没讲清楚啊!
你传递的是引用类型,什么是第2次使用的时候啊?
火鸟33 2004-03-18
  • 打赏
  • 举报
回复
DB::DBData data

接受值得结构体,我也用过指针,还是不行,怀疑不在一个地址空间
beyondtkl 2004-03-18
  • 打赏
  • 举报
回复
你是说在这里循环调用的时候

for(int i = 0;i<TaskNum;i++)
{
if (dbc.GetConf(data,i,keydata))//data 和keydata都是引用
{
// 出现不一致么。

你的DbOperate::DbOperate(const DB::DBData & datavalue)//构造函数 是const reference呀 你在里面也没有修改datavalue吧。。 在页面上看代码总是不太习惯

火鸟33 2004-03-18
  • 打赏
  • 举报
回复
是不是2个对象不在同一个地址空间啊。

dbc和DbObj是两个不同对象,会出问题不;

DB::DBData data;是公有对象。
beyondtkl 2004-03-18
  • 打赏
  • 举报
回复
int GetDbConfig::GetConf(DB::DBData & datavalue,int iFileIndex,DB::Key & keyvalue
// 看你的具体实现了。

怎么把结构体数据带出来啊
// 哪个结构体? 可以传入一个指向结构的指针呀
火鸟33 2004-03-18
  • 打赏
  • 举报
回复
DB::DBData data;
DB::Key keydata;
GetDbConfig dbc;
int TaskNum;
TaskNum = dbc.GetFiles("index.conf");
if (TaskNum>0)
{
for(int i = 0;i<TaskNum;i++)
{
if (dbc.GetConf(data,i,keydata))//data 和keydata都是引用
{
DB::DBData tmpdata = data;
DbOperate DbObj(data);//data 引用


int iRec = DbObj.GetCount(data);//data 引用
for (int j = 0;j<iRec;j++)
{
if (iRec>0)
{
DbObj.GetDBData(data,j);//data 引用

cout << "Validating connection"<<endl;
CORBA::Short rs=db->senddata(data); data引用
cout << rs<<endl;

};

};
};


};

};


int GetDbConfig::GetConf(DB::DBData & datavalue,int iFileIndex,DB::Key & keyvalue)

DbOperate::DbOperate(const DB::DBData & datavalue)//构造函数

bool DbOperate::GetDBData(DB::DBData & datavalue,int iFieldIndex)

火鸟33 2004-03-18
  • 打赏
  • 举报
回复
凡是使用data,都是以引用方式传递的参数

fierygnu 2004-03-17
  • 打赏
  • 举报
回复
引用在哪里?
火鸟33 2004-03-17
  • 打赏
  • 举报
回复
引用类型,每次调用都会被初始化么?

64,683

社区成员

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

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