我不知道为什么我收到此错误: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
};
答案 0 :(得分:0)
使用typename
代替class
:
typename List<T>::ListNode * curr = head; //correct
//class List<T>::ListNode * curr = head; //incorrect
这是一个例子,您无法使用class
代替typename
。
错误: list.cpp :127:错误:'class List'没有名为'curr'的成员
从错误中可以清楚地看到模板的定义在.cpp
文件中。这是问题的另一个原因。您无法在另一个文件中提供模板的定义。声明和定义应该在同一个文件中。所以将所有定义移到头文件中。
答案 1 :(得分:0)
班级List
没有会员curr
,这就是错误所说的内容。我很确定这个班确实没有那个成员。
另一个具有相同名称的范围内的另一个变量这一事实无关紧要。
答案 2 :(得分:0)
问题是curr
内没有List<T>
这样的成员!你误解了,curr
是List<T>::ListNode
!!
在class
内声明class
并不意味着所有内部类成员也被委托给外部类,反之亦然。您需要在ListNode* curr;
内List<T>
才能完成此操作。
解决编译器错误后,您将最终解决运行时错误,因为您的类还有其他几个问题。例如,
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;
。