VC 链表问题,请路过帮顶

时间:2021-08-19 21:30:02
我想建立一个链表,链表中每个结点有三个数据,x,y,z,而我这些数据之前是先存在一个数组中的,我刚刚开始学链表,在网上看了好多东西,可是还是一头雾水呀,,我的想用用Vc中的Clist类来实现,可是链表的建立就让我犯了难。、。下面这段程序,是我自己尝试的一段,之所以定义Data,是因为我最后的目的是要每个节点存三个数据,而且两个是int,一个是float。我又不知道VC中是否有现成的类型,msdn中不是说任何类型都可以吗,就只能尝试自己定义了。再请推荐几本关于VC链表的好书
strcut Data 
{ int x;int y;} ; 

strcut Data p; 
CList<Data,Data> Pointlist; 
POSITION posp; 
Pointlist.AddTail(Data(2,3)); 
Pointlist.AddTail(Data(4,5)); 
posp=Pointlist.GetHeadPosition(); 
for(;posp!= NULL;Pointlist.GetNext(posp)) 
{......} 
这段程序有错误提示 
: error C2065: 'strcut' : undeclared identifier 
: error C2146: syntax error : missing ';' before identifier 'Data' 
: error C2065: 'Data' : undeclared identifier 
: error C2143: syntax error : missing ';' before '{' 
: error C2146: syntax error : missing ';' before identifier 'Data' 
: error C2146: syntax error : missing ';' before identifier 'p' 
: error C2065: 'p' : undeclared identifier 
: error C2955: 'CList' : use of class template requires template argument list 
c:\program files\microsoft visual studio\vc98\mfc\include\afxtempl.h(653) : see declaration of 'CList' 

16 个解决方案

#1


strcut 是什么 应该是struct吧

#2


建议这样用:
strcut Data 

  int x;
  int y;
}DATA;



DATA p; 

#3


呜呜,struct是写错了,改过来也还是不行呀

#4


Data(2,3)又是什么?
给结构复制不能这么用啊
一种方法是
strcut Data 

  int x; 
  int y; 
}DATA; 


DATA p; 
p.x=1;
p.y=2;

还有一种是
Data p={1,2};

还有你的这玩意儿又是什么东东?
Pointlist.AddTail(Data(4,5)); 

我没有用过CList,但是据常理,添加的应该是个指针才对吧
看看MSDN吧

#5


没有仔细看你的程序,看了你的error...很多常识错误
提示一下:
//--单链表声明--//
typedef struct _Data{
int x;
int y;
float z;
_Data *next;
}Data;
Data *point;
Data head;
....
后面你自己搞吧...
还有,看数据结构的书就可以了 VC只是工具而已

#6


嗯,写得不是很规范
error里面都很清楚你哪里出错啦

#7


恩,在错误中进步。。。前面几位已经说得很清楚了。。。

#8


CList<Data,Data> 不对 的

CList<Data>

#9


Pointlist.AddTail是Clist类的函数,我看书上都有这么用的,
我的程序是想把我自己已经存在数组里的数据放在链表里,放到链表里,然后再利用Clist类里现成的函数,做一些操作。因为我的数据类型和个数的问题,所以我弄不懂应该在建立链表时,应该怎样做。所以我才编了上面的程序,先看看有两个元素情况。

#10


typedef struct _Data{ 
         int x; 
         int y; 
         float z; 
         _Data *next; 
  }Data; 
   Data *point; 
   Data p;
   
   
   CList<Data,Data>  Pointlist; 
只运行到上面这一段,就有下面的错误,说是这种类型不能被作为模板
'struct CLISTDlg::OnButton1::_Data' : types with no linkage cannot be used as template arguments
Pointlist' uses undefined class 'CList<int,int>'

#11


strcut Data 

  int x;
  int y;
} DATA; 

CList <DATA,DATA> Pointlist; 
POSITION posp; 
DATA * p=NULL;

p=new DATA();
p->x=1;p->y=2;
Pointlist.AddTail(p); 
p=new DATA();
p->x=4;p->y=5;
Pointlist.AddTail(p);
 
posp=Pointlist.GetHeadPosition(); 
while(posp!=NULL)
{
  p=Pointlist.GetNext(posp);
  TRACE("x=%d,y=%d",p->x,p->y);
  delete p;
  p=NULL;
}

#12


shenyi0106 谢谢,我还有一个问题,就像上面说的,我想把数组中的数据存进到链表里,应该如何做呢

#13


哦,可以在我计算数据时就直接存到链表里,但是我还是想知道,怎样把数组里的数存进去

#14


这是业务数据问题,你可以在定义结构体是就加进去,如:
strcut Data 

  int x; 
  int y; 
  int mydate[100];
} DATA; 
以后把数据拷贝到mydate里面就可以了

也可以直接修改CList模版一完成你的需求,如:
CList <void *,void *> Pointlist;
这样,你的CList就可以存储任何数据类型了

#15


 CList <Data*,Data*>  Pointlist; 

#16


程序在while(posp!=NULL) 
这里出错,错误提示如下

error C2143: syntax error : missing ';' before '}'
D:\双目视觉\LIST\LISTDlg.cpp(197) : fatal error C1003: error count exceeds 100; stopping compilation
而且是我后面几句删了,还是在}位置出错
谢谢

#1


strcut 是什么 应该是struct吧

#2


建议这样用:
strcut Data 

  int x;
  int y;
}DATA;



DATA p; 

#3


呜呜,struct是写错了,改过来也还是不行呀

#4


Data(2,3)又是什么?
给结构复制不能这么用啊
一种方法是
strcut Data 

  int x; 
  int y; 
}DATA; 


DATA p; 
p.x=1;
p.y=2;

还有一种是
Data p={1,2};

还有你的这玩意儿又是什么东东?
Pointlist.AddTail(Data(4,5)); 

我没有用过CList,但是据常理,添加的应该是个指针才对吧
看看MSDN吧

#5


没有仔细看你的程序,看了你的error...很多常识错误
提示一下:
//--单链表声明--//
typedef struct _Data{
int x;
int y;
float z;
_Data *next;
}Data;
Data *point;
Data head;
....
后面你自己搞吧...
还有,看数据结构的书就可以了 VC只是工具而已

#6


嗯,写得不是很规范
error里面都很清楚你哪里出错啦

#7


恩,在错误中进步。。。前面几位已经说得很清楚了。。。

#8


CList<Data,Data> 不对 的

CList<Data>

#9


Pointlist.AddTail是Clist类的函数,我看书上都有这么用的,
我的程序是想把我自己已经存在数组里的数据放在链表里,放到链表里,然后再利用Clist类里现成的函数,做一些操作。因为我的数据类型和个数的问题,所以我弄不懂应该在建立链表时,应该怎样做。所以我才编了上面的程序,先看看有两个元素情况。

#10


typedef struct _Data{ 
         int x; 
         int y; 
         float z; 
         _Data *next; 
  }Data; 
   Data *point; 
   Data p;
   
   
   CList<Data,Data>  Pointlist; 
只运行到上面这一段,就有下面的错误,说是这种类型不能被作为模板
'struct CLISTDlg::OnButton1::_Data' : types with no linkage cannot be used as template arguments
Pointlist' uses undefined class 'CList<int,int>'

#11


strcut Data 

  int x;
  int y;
} DATA; 

CList <DATA,DATA> Pointlist; 
POSITION posp; 
DATA * p=NULL;

p=new DATA();
p->x=1;p->y=2;
Pointlist.AddTail(p); 
p=new DATA();
p->x=4;p->y=5;
Pointlist.AddTail(p);
 
posp=Pointlist.GetHeadPosition(); 
while(posp!=NULL)
{
  p=Pointlist.GetNext(posp);
  TRACE("x=%d,y=%d",p->x,p->y);
  delete p;
  p=NULL;
}

#12


shenyi0106 谢谢,我还有一个问题,就像上面说的,我想把数组中的数据存进到链表里,应该如何做呢

#13


哦,可以在我计算数据时就直接存到链表里,但是我还是想知道,怎样把数组里的数存进去

#14


这是业务数据问题,你可以在定义结构体是就加进去,如:
strcut Data 

  int x; 
  int y; 
  int mydate[100];
} DATA; 
以后把数据拷贝到mydate里面就可以了

也可以直接修改CList模版一完成你的需求,如:
CList <void *,void *> Pointlist;
这样,你的CList就可以存储任何数据类型了

#15


 CList <Data*,Data*>  Pointlist; 

#16


程序在while(posp!=NULL) 
这里出错,错误提示如下

error C2143: syntax error : missing ';' before '}'
D:\双目视觉\LIST\LISTDlg.cpp(197) : fatal error C1003: error count exceeds 100; stopping compilation
而且是我后面几句删了,还是在}位置出错
谢谢