模板出列方法具有未声明的标识符

时间:2012-10-15 16:23:14

标签: c++ templates queue

所以我目前正在将队列实现为单链表。一切都很顺利,但是编译器在我的dequeue方法中标记了我。

这就是Visual Studio对我的咆哮:

  

错误C2065:'已删除':未声明的标识符

这是我的dequeue方法,它应该返回刚刚从队列中删除的值:

template <typename Type>
Type QueueLinked<Type>::deque() {
if (queueFront == 0) {
    cout << "Queue is empty! There's nothing to remove!" << endl;
} else {
    nodeType<Type> *temp;
    temp = queueFront;
    queueFront = queueFront->next;
    Type Removed = temp->dataItem;
    delete temp;

    if (queueFront == 0) {
        queueRear = 0;
    }
}
return Removed;
} 

这是我的节点struct:

template <typename Type>
struct nodeType {
    Type dataItem;
    nodeType<Type> *next;
};

这似乎是一个非常简单的错误,但我没有看到导致这种情况的原因。希望我不会太愚蠢,但这不是第一次。

1 个答案:

答案 0 :(得分:1)

你在else区块中声明它,当然它在它之外是未声明的。在if之前声明它。

尝试这种方式:

template <typename Type>
Type QueueLinked<Type>::deque() {
  Type Removed;
  if (queueFront == 0) {
    cout << "Queue is empty! There's nothing to remove!" << endl;
  } else {
    nodeType<Type> *temp;
    temp = queueFront;
    queueFront = queueFront->next;
    Removed = temp->dataItem;
    delete temp;

    if (queueFront == 0) {
        queueRear = 0;
    }
  }
return Removed;
}