我被编译器错误困住了,似乎无法在线找到解决方案(主要是因为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 *

09-27 12:43