【问题标题】:Template dequeue method has an undeclared identifier模板出队方法有一个未声明的标识符
【发布时间】:2012-10-15 16:23:14
【问题描述】:

所以我目前正在将队列实现为单链表。一切都很好,但是编译器在我的 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;
} 

这是我的节点结构:

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

这似乎是一个非常简单的错误,但我看不出是什么原因造成的。希望我不会太愚蠢,但这不会是第一次。

【问题讨论】:

    标签: c++ templates queue


    【解决方案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;
    } 
    

    【讨论】:

    • 你是 100% 正确的。我应该看到我返回的只是在某些情况下声明的东西。菜鸟的错误,但吸取了教训。
    • 您可能还会问自己,当没有删除任何内容时,您正在返回什么!
    • 我立即怀疑这个事实。在我的脑海中,我认为它只是让 Removed 未定义,但在 Matzi 的帮助下很明显,如果它从未被声明,那么这会导致一个完全独立的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-30
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    相关资源
    最近更新 更多