错误:"类列表"<RGBApixel>没有名为"curr"链表的成员



我不知道为什么我得到这个错误:List .cpp:127:错误:' class List '没有名为' curr '的成员

template <class T>
List<T> List<T>::mixSplit()
{
    List<T> * newList;
    class List<T>::ListNode * curr = head;
    newList->length=0;
    newList->length-3;
    newList->head = NULL;
    newList->tail=NULL;
    for (int count=0;count<1;count++)
        newList->curr=newList->curr->next;
    newList->head=newList->curr;
    newList->tail=tail;
    tail=newList->curr->prev;
    tail->next=NULL;
    newList->head->prev=NULL;
    newList->tail->next=NULL;
    return newList;
}

错误发生在

newList->curr=newList->curr->next;

当我这样做时:

    class List<T>::ListNode * curr = head;

这难道不允许curr成为newList的头吗?

编辑:下面是类定义:

template <class T>
class List
{
private:
class ListNode
{
    public:
    // constructors; implemented in list_given.cpp
    ListNode();
    ListNode(T const & ndata);
    // member variables
    ListNode * next;
    ListNode * prev;
    const T data; // const because we do not want to modify node's data
};

List没有成员curr,这就是错误提示。我很确定这个类确实没有这个成员。

在不同的作用域中存在另一个具有相同名称的变量,这是无关的。

typename代替class:

typename List<T>::ListNode * curr = head; //correct
//class List<T>::ListNode * curr = head; //incorrect

这是一个不能用class代替typename的例子。

error: List .cpp:127: error: ' class List '没有名为' curr '的成员

从错误中可以清楚地看出模板的定义在.cpp文件中。这是问题的另一个原因。不能在另一个文件中提供模板的定义。声明和定义应该在同一个文件中。因此,将所有的定义移动到头文件

问题是List<T>里面没有curr这样的成员!你误解了,currList<T>::ListNode的成员!! !

仅仅在class中声明class并不意味着所有的内部类成员也都委托给外部类,反之亦然。你需要在List<T>里面有ListNode* curr;来完成这个。

在解决编译错误之后,您将最终解决运行时错误,因为您的类还有其他几个问题。例如,

List<T> * newList;  // dangling/uninitialized pointer
class List<T>::ListNode * curr = head;  // curr is unused and pointing to something unknown

必须初始化newList = new List<T>;来使用指针。或者您可以将自动对象声明为List<T> newList;

相关内容

  • 没有找到相关文章

最新更新