如何从LIST中取值,数据类型为一个自定义的struct

JoneG 2008-06-20 02:35:27
我定义了一个struct,如下:
typedef struct _tagStructName
{
String strOrderId;
float fPrice;
}StructName,*lpStructName;
然后
typedef list<lpStructName> StructNameList;
我已经把值放到StructNameList structNameList里面了(在调试状态中看到值已经push_back进去了),在程序中怎么取structNameList的值啊?
我这样取值取不到:
for(StructNameList::iterator iteList = structNameList.begin();
iteList != structNameList.end();iteList++)
{
lpStructName structInfo = *iteList;
ShowMessage(iteList->strOrderId);
}
循环能进去,但是显示值时提示错误:Access violation at address 77F87666 in module 'ntdll.dll'.Read of address 01040000.Process stopped.
我不知道到底是什么原因导致的这个错误。请高手指教!
...全文
505 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
jxw1987628 2008-06-20
  • 打赏
  • 举报
回复
lpStructName structInfo = *iteList;

iterList已经是迭代器了。

*iterList

*操作后,变成结构体实例了,你的lpStructName是结构体指针类型,这里有问题吧!

接下来操作应该是

iterList->? (结构体成员)

或者 (*iterList).? (结构体成员)
Light_X 2008-06-20
  • 打赏
  • 举报
回复
iteList++是什么?
Waiting4you 2008-06-20
  • 打赏
  • 举报
回复
把CodeGuard打开,看看它能不能帮你找到线索。
代码应该什么问题的
JoneG 2008-06-20
  • 打赏
  • 举报
回复
我调试的时候看过了,赋值的地方只走了一次,取值的地方也只走了一次,但是就是值不对
loveshell 2008-06-20
  • 打赏
  • 举报
回复
会不会在循环之前原来structName所在的内存已经被改变了?
JoneG 2008-06-20
  • 打赏
  • 举报
回复
sorry!
我的循环敲错了,实际上是这样的
for(StructNameList::iterator iteList = structNameList.begin();
iteList != structNameList.end();iteList++)
{
lpStructName structInfo = *iteList;
ShowMessage(structInfo->strOrderId);
}
jasonnbfan 2008-06-20
  • 打赏
  • 举报
回复
1
lpStructName structInfo = *iteList;
ShowMessage((*)iteList->strOrderId);

2
lpStructName structInfo = *iteList;
ShowMessage( structInfo->strOrderId);



JoneG 2008-06-20
  • 打赏
  • 举报
回复
我调试的时候 structName->strOrderId 里面看到是已经有值的了。
在循环里取的时候就不行。
JoneG 2008-06-20
  • 打赏
  • 举报
回复
我是这样放值进去的:
StructName * structName;
structName = new StructName;
structName->strOrderId = "值";
structName->fPrice = 值;

structNameList.push_back(structName);
这样可以把值放进去的吧?
  • 打赏
  • 举报
回复
StructName stru;
structNameList.push_back( &stru );是这样放进去的么?
要是这样错误正常

structNameList.push_back( new StructName(stru) );应该改为这样。
  • 打赏
  • 举报
回复
另外你怎么放进去的?
你放进去的之后得注意指针所指向的对象是否无效?
  • 打赏
  • 举报
回复
ShowMessage( (*iteList)->strOrderId);

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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