我想将MFC类的CList
用于静态值和动态值。
我猜&d1
是指向d1
值的指针,所以不应该有错误,但有。
我理解错误来自const
与否之间的差异,它不能是l值。但我想将它用作CList<DATA*, DATA*&>
的条目。
错误:
error C2664: 'struct __POSITION *__thiscall CList<struct DATA *,struct DATA
* &>::AddTail(struct DATA *& )' : cannot convert parameter 1 from 'struct
DATA *' to 'struct DATA *& '
然后我可以像下面那样展示这个。 还有另一种方法可以避免这种错误吗? 提前谢谢。
#include "stdafx.h"
#include <afxtempl.h>
struct DATA
{
int n;
CString id;
CString time;
};
DATA d1;
int main()
{
CList<DATA*, DATA*&> list2;
d1.n = 1;
//error here
list2.AddTail((DATA*)&d1);
//no error
DATA* pd1;
pd1 = &d1;
list2.AddTail(pd1);
return 1;
}
答案 0 :(得分:2)
struct DATA { int n; CString id; CString time; }; ... CList<DATA*, DATA*&> list2;
我认为您使用的是CList
错误。你应该做的是:
CList<DATA> myList;
// Create and populate your data...
DATA d1;
d1.n = 1;
...
// Add new node to the list
myList.AddTail(d1);
请注意更简单的语法CList<DATA>
。链表由具有嵌入式DATA
对象的节点构成。为什么需要另一个包含指针到DATA
个对象的节点的间接?这对缓存不太友好(遵循那些指向数据)并且效率更低。
另请注意,如果您只使用CList<DATA>
,则根据ARG_TYPE
模板声明({{},默认情况下会将第二个模板参数const DATA&
正确推断为CList
。 1}},TYPE = DATA
):
ARG_TYPE = const DATA&
修改强>
如果您确实要将指针存储到template<class TYPE, class ARG_TYPE = const TYPE&>
class CList : public CObject
节点中的DATA
,那么您可以执行以下操作:
CList