我被编译器错误困住了,似乎无法在线找到解决方案(主要是因为Google无法处理语法)。这是我遇到的唯一错误(MVS 2005)。
error C2664: 'LinkedList<T>::CreateLinkedList' : cannot convert parameter 2
from 'const MemberInfo *' to 'MemberInfo *const *' memberdata.cpp 59
错误指向这段代码。
ILinkedList*
MemberData::CreateLinkedList()
{
const MemberInfo* mi = this->get(FIRST);
LinkedList<MemberInfo*>::CreateLinkedList(
MemberInfo::CompareByTime,
mi);
return NULL;
}
相关代码如下:
MemberInfo类
// MemberInfo declaration
class
MemberInfo
{
public:
static int
CompareByTime(
const void* mi1,
const void* mi2);
};
// MemberInfo implementation
int
MemberInfo::CompareByTime(
const void* mi1,
const void* mi2)
{
if ( mi1 == NULL || mi2 == NULL )
return 0;
if ( ((MemberInfo*)mi1)->m_Time > ((MemberInfo*)mi2)->m_Time )
return 1;
if ( ((MemberInfo*)mi2)->m_Time > ((MemberInfo*)mi1)->m_Time )
return -1;
return 0;
}
LinkedList类
typedef int (*ComparatorFcn)(const void*, const void*);
template <class T>
class LinkedList
: public ILinkedList
{
private:
protected:
const T*
m_ptValue;
ComparatorFcn
m_pCompFcn;
LinkedList(
const T* ptVal,
ComparatorFcn func);
public:
static ILinkedList*
CreateLinkedList(
ComparatorFcn func,
const T* ptVal)
{
LinkedList<T>* t = new LinkedList<T>(ptVal, func);
return t;
}
virtual
~LinkedList();
LinkedList<T>*
AddLink(
T* pLink);
virtual bool
Remove();
virtual bool
RemoveLink(
ILinkedList* pLink);
};
我很困。我不明白为什么编译器会认为函数
CreateLinkedList
的参数是MemberInfo *const *
,而不是我如何将其声明为const MemberInfo*
(或实际上是const T*
)。有帮助的想法吗?
谢谢!
最佳答案
您的LinkedList<MemberInfo*>
应该是LinkedList<MemberInfo>
。
请注意,错误消息提到MemberInfo *const *
-指向指针的指针。
由于用于实例化模板的类型是MemberInfo *
,因此T将是MemberInfo *
,并且CreateLinkedList
函数期望将T const *
称为MemberInfo * const *
。
您传递的类型是MemberInfo const *
或const MemberInfo *
。
因此,您要让编译器从const MemberInfo *
转换为MemberInfo * const *