与创建模板类相关的错误

时间:2014-10-03 03:31:44

标签: c++ compiler-errors queue priority-queue

我正在创建一个包含内部朋友Node类的PriorityQueue模板类。当我尝试编译下面的代码时,我现在收到这些错误:

    PriorityQueue.h:20:12: error: declaration of ‘class T’
   template<typename T> class Node
            ^
PriorityQueue.h:16:11: error:  shadows template parm ‘class T’
 template <typename T> class PriorityQueue
           ^
PriorityQueue.h:22:25: error: expected nested-name-specifier
        friend typename PriorityQueue<T>;
                        ^
PriorityQueue.h:22:41: error: invalid declarator before ‘;’ token
        friend typename PriorityQueue<T>;
                                        ^
PriorityQueue.cpp:66:1: error: ‘PriorityQueue<T>::Node’ is not a type
 PriorityQueue<T>::Node::Node()
 ^
PriorityQueue.cpp:66:30: error: ISO C++ forbids declaration of ‘Node’ with no type [-fpermissive]
 PriorityQueue<T>::Node::Node()
                              ^
PriorityQueue.cpp:66:30: error: invalid use of dependent type ‘typename PriorityQueue<T>::Node’

PriorityQueue.cpp:74:1: error: ‘PriorityQueue<T>::Node’ is not a type
 PriorityQueue<T>::Node::Node(T data, int *index, float priority)
 ^

PriorityQueue.cpp:74:64:错误:ISO C ++禁止声明'Node'没有类型[-fpermissive]     PriorityQueue :: Node :: Node(T数据,int *索引,浮点优先级)                                                                    ^     PriorityQueue.cpp:74:64:错误:无效使用依赖类型'typename PriorityQueue :: Node'

PriorityQueue.h:

#ifndef PRIORITYQUEUE_H_
#define PRIORITYQUEUE_H_
#include <vector>
#include <map>

using namespace std;

template<typename T> class Node

template <typename T> class PriorityQueue
{

public: 
    template<typename T> class Node
    {
            friend typename PriorityQueue<T>;
        private:
                T data;
            int *index;
            float priority;

            public:
            Node();
            Node(T data, int *index, float priority);       
    }; 

private:
    vector<T> v;
    map<T, int*> m;
    int vSize;  
public:
    PriorityQueue();
    ~PriorityQueue();
    void insert(T obj, float priority);
    T front();
    T pop();
    bool isEmpty();
    void changePriority(T obj, float new_priority); 

};

#endif

PriorityQueue.cpp:

#include "PriorityQueue.h"
#include <vector>
#include <map>

using namespace std;

template<class T>
PriorityQueue<T>::PriorityQueue()
{
    vector<T> v;
    map<T, int*> m;
    this.vSize = 0;
}
template<class T> 
PriorityQueue<T>::~PriorityQueue()
{

}
template<class T> 
void PriorityQueue<T>::insert(T obj, float priority)
{
    Node<T> n = new Node<T>(obj, vSize, priority);

    v[vSize] = n;
    m.insert(obj, vSize);

    vSize++;
}
template<class T> 
T PriorityQueue<T>::front()
{

}
template<class T>
T PriorityQueue<T>::pop()
{  

}
template<class T>
bool PriorityQueue<T>::isEmpty()
{
    bool b = false;
    if(vSize > 0)
    {
        b = true;
        return b;
    }
    else
    {
        return b;
    }   
}   
template<class T>
void PriorityQueue<T>::changePriority(T obj, float new_priority)
{

}

template<class T>
PriorityQueue<T>::Node::Node()
{
   data = NULL;
   index = 0;
   priority = 0.0;  
}

template<class T> 
PriorityQueue<T>::Node::Node(T data, int *index, float priority)
{
    this->data = data;
    this->index = index;
    this->priority = priority;
}

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:2)

在您向前发布Node之后,您似乎错过了一个分号。这可能是编译器头痛的根源。