
请教C++高手关于结构体指针错误问题!!!急!!!急!!!!急 问题如下
开发环境是:BCB6.0问题程序如下:1、结构体定义如下typedefstructMyData{intnIndexOfToolList;intnCompensate;PR...
开发环境是:BCB6.0
问题程序如下:
1、结构体定义如下
typedef struct MyData
{
int nIndexOfToolList;
int nCompensate;
PRecord RecordStruct;
TList *RecordList;
__fastcall MyData()
{
RecordList = new TList;
}
。。。。。。。。。。。
}Data;
typedef Data *PData;
TList *DataList;
2、在程序中调用如下:
。。。。。。。。。。。。
for(j = 0; j < ((PData)(DataList->Items[i]))->RecordList->Count; j++)
{
。。。。。。。。
}
编译就报错:
E2288 Pointer to structure required on left side of->or->*
检查了半天也不知道是什么问题
在线等啊 !!!麻烦遇到过这个问题的兄弟姐妹们帮小弟解答下 !!!!!! 展开
问题程序如下:
1、结构体定义如下
typedef struct MyData
{
int nIndexOfToolList;
int nCompensate;
PRecord RecordStruct;
TList *RecordList;
__fastcall MyData()
{
RecordList = new TList;
}
。。。。。。。。。。。
}Data;
typedef Data *PData;
TList *DataList;
2、在程序中调用如下:
。。。。。。。。。。。。
for(j = 0; j < ((PData)(DataList->Items[i]))->RecordList->Count; j++)
{
。。。。。。。。
}
编译就报错:
E2288 Pointer to structure required on left side of->or->*
检查了半天也不知道是什么问题
在线等啊 !!!麻烦遇到过这个问题的兄弟姐妹们帮小弟解答下 !!!!!! 展开
展开全部
typedef struct MyData
{
int nIndexOfToolList;
int nCompensate;
PRecord RecordStruct;
TList *RecordList;
__fastcall MyData()
{
RecordList = new TList;
}
。。。。。。。。。。。
}Data,*pData;
{
int nIndexOfToolList;
int nCompensate;
PRecord RecordStruct;
TList *RecordList;
__fastcall MyData()
{
RecordList = new TList;
}
。。。。。。。。。。。
}Data,*pData;
更多追问追答
追问
.....问题还是不能解决 ,这样改了和上面的一样啊 只是方式不同而已
追答
bcb 基本不用
TList 是链表模板?
typedef Data *PData; 这句去掉
编译错误:结构体指针需要左值
for(j = 0; j Items[i]))->RecordList->Count; j++) 这里可能有错误
你试下这样写
*DataList.Items[i]->RecordList->Count
如果不行 就顶一个变量 取出Count 后再循环
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
问题1.
第一个程序声明node* p,这里的p是一个全局变量.C++默认将全局变量初始化为0.所以输出结果是0x00000000.第二个程序的node* p声明在主函数main()之中,这里的p是一个局部变量.输出的应该是个随机值,但安全起见0xCCCCCCCC是一个比较远的地址,是一个用户不可以使用的地址.
问题2.
两个程序中,你指声明了一个结构体变量的指针.其实质是一个地址.*p表示p中存储的地址中的内容.
举个例子,int* q=a;,q表示变量a的地址,而*q表示变量a的值.正确的做法如下:
node* p;
node element;
p=&element
element.k=1;//或p->k=1;
element.next=NULL.//或p->next=NULL;
cout<<p->k<<endl;//或cout<<element.k<<endl
明白了吗?
第一个程序声明node* p,这里的p是一个全局变量.C++默认将全局变量初始化为0.所以输出结果是0x00000000.第二个程序的node* p声明在主函数main()之中,这里的p是一个局部变量.输出的应该是个随机值,但安全起见0xCCCCCCCC是一个比较远的地址,是一个用户不可以使用的地址.
问题2.
两个程序中,你指声明了一个结构体变量的指针.其实质是一个地址.*p表示p中存储的地址中的内容.
举个例子,int* q=a;,q表示变量a的地址,而*q表示变量a的值.正确的做法如下:
node* p;
node element;
p=&element
element.k=1;//或p->k=1;
element.next=NULL.//或p->next=NULL;
cout<<p->k<<endl;//或cout<<element.k<<endl
明白了吗?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
TList定义是什么???
Items又是什么类型的???
Items又是什么类型的???
追问
TList包含对象指针列表。
类关系 TObject
Tlist用于存储和维护对象列表。TList引入属隆和方法以执行以下操作:
(1)在列表中增加或删除对象。
(2)在列表中重排对象。
(3)在列表中定位和获得对象。
(4)在列表中对对象进行排序。
追答
我觉得语法上并没错啊,是不是那里少加括号了。这样都编译不过只能说BCB不符合C++标准
要么这样写
PData pData = (PData)(DataList->Items[i]);
TList * recordList = pData ->RecordList;
for(j = 0; j Count; j++)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询