为什么不对?为什么不对?谁有 CMapStringToOb 使用的详细例程?急!!!

librastar2001 2004-01-09 01:42:09
注:不要MSDN中的例子。

另:CMapStringToOb 是否可以映射结构?


//以下是我的代码

CMapStringToOb Map_Compose;
class C_COMPOSE
{
public:
CString PointName;
float Result;
};
C_COMPOSE C_Compose;
C_COMPOSE *test;

C_Compose.PointName="A00-A";
Map_Compose.SetAt(C_Compose.PointName,(CObject*&)C_Compose);
Map_Compose.Lookup(C_Compose.PointName ,( CObject*& ) test );


//运行结果:test->PointName="" 不懂。。。
...全文
153 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
librastar2001 2004-01-12
  • 打赏
  • 举报
回复
多谢各位了,问题已经解决,将C_COMPOSE定义为结构也可以
haocb_jia 2004-01-09
  • 打赏
  • 举报
回复
写错了:
Map_Compose.SetAt(C_Compose.PointName,new C_COMPOSE (Compose));
应该为:
Map_Compose.SetAt(C_Compose.PointName,new C_COMPOSE (C_Compose));
加入了拷贝构造函数的类的实现类似:
class C_COMPOSE : public CObject
{
public:
C_COMPOSE()
{
PointName = "";
Result = 0;
}
C_COMPOSE(const C_COMPOSE& aComp)
{
PointName = aComp.PointName;
Result = aComp.Result;
}
public:
CString PointName;
float Result;
};

No problem!!!
haocb_jia 2004-01-09
  • 打赏
  • 举报
回复
CMapStringToOb Map_Compose;
class C_COMPOSE : public CObject
{
public:
CString PointName;
float Result;
};
C_COMPOSE C_Compose;
C_COMPOSE *test;

C_Compose.PointName="A00-A";
Map_Compose.SetAt(C_Compose.PointName,new C_COMPOSE (Compose));
if (Map_Compose.Lookup(C_Compose.PointName ,( CObject*& ) test ) != FALSE)
{
......
}

C_COMPOSE必须派生于CObject,调用SetAt的时候要重新生成一个C_COMPOSE类的指针传入,因为如果你的局部类对象超出范围后,析构,Map中的指针也就不合法了。当然前提是你已经实现了该类的拷贝构造函数。
fzd999 2004-01-09
  • 打赏
  • 举报
回复
C_COMPOSE *test;

另外,C_COMPOSE必须派生自CObject
feiniaoliang 2004-01-09
  • 打赏
  • 举报
回复
似的,C_COMPOSE要派生于CObject
bluebohe 2004-01-09
  • 打赏
  • 举报
回复
CMapStringToOb
到不如使用CMapStringToPtr
这样的话映射到某个对象的地址,只是一些指针操作,处理起来比较快一些:
{
CMapStringToPtr StrMap;
int *p=new int;
*p=10;
StrMap.SetAt("bluebohe",p);
p=new int;
*p=11;
StrMap.SetAt("vcforever",p);
p=NULL;
POSITION pos=StrMap.GetStartPosition();
while(pos)
{
CString str;
StrMap.GetNextAssoc(pos,str,(void *&)p);
if(p!=NULL)
{
delete p;
p=NULL;
}
}
StrMap.RemoveAll();

}

flyelf 2004-01-09
  • 打赏
  • 举报
回复
C_COMPOSE要派生于CObject
TianPing2002 2004-01-09
  • 打赏
  • 举报
回复
void fun( )
{

CStringList s, *get ;
s.AddTail ( "Cord" ) ;
s.AddTail ( "Filament" ) ;
s.AddTail ( "Rope" ) ;
s.AddTail ( "Thread" ) ;

CMapStringToOb p ;
p["String"]= ( CObject * ) &s ;

POSITION pos ;
p.Lookup ( "String", ( CObject *& ) get ) ;

pos = get -> GetHeadPosition( ) ;

cout << "\nA String means: " ;
while ( pos != NULL )
{

CString str = get -> GetNext ( pos ) ;
cout << (LPCTSTR) str << " " ;

}
cout << endl ;

}
librastar2001 2004-01-09
  • 打赏
  • 举报
回复
不行,不行。。。
zhangcrony 2004-01-09
  • 打赏
  • 举报
回复
同意fzd999
librastar2001 2004-01-09
  • 打赏
  • 举报
回复
test是什么?
fzd999 2004-01-09
  • 打赏
  • 举报
回复
你对CMapStringToOb的使用完全正确,不过,你忘了给test分配空间了。

test = new C_COMPOSE[nNum]; // nNum的设置根据你的具体情况,呵呵

参考一下MSDN的语句:
map.SetAt( "Bart", new CAge( 13 ) ); // 实时分配了空间
^^^^^^^^^^^^^^

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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