在模板类实现中使用结构模板

Posted

技术标签:

【中文标题】在模板类实现中使用结构模板【英文标题】:using struct template in template class implementation 【发布时间】:2013-09-26 05:16:07 【问题描述】:

我正在尝试学习 C++ 中的模板用法。我创建了一个在队列类实现中使用的结构节点,但出现编译器错误: 错误”成员函数 bool MyQueue::add(T data) 中 qnode 之前的预期类型说明符

#include <iostream>

using namespace std;

template <typename T>
struct qnode 
   qnode* Node;
   T data;
;

template <class T>
class MyQueue 
    qnode<T>* front;
    qnode<T>* end;
    public:
    MyQueue() 
        front=NULL;
        end=NULL;
    
    bool add (T n);
    T get(void);
    bool empty(void)
    
        if ( front == NULL)
            return true;
        else
            return false;
    

    size_t size(void)
    

    
 ;

 template <typename T>
    bool MyQueue<T>::add ( T n)
    
        qnode<T>* temp = new qnode;
        temp->data = n;
        temp->Node = NULL;
        if ( front == NULL )
        
            cout << "Adding front qnode " << endl;
            front = end= temp;
           // front->Node = end;
            return true;
        
            cout << "Adding  qnode " << endl;
        end->Node = temp;
        end=temp;
   //delete temp;

        return true;
    

我期待在这种嵌套实现中如何解析模板参数的一个很好的解释。

【问题讨论】:

@ZackNewsham 不在 C++ 中 @555k 啊-谢谢,我知道它在 C 中是如何完成的。我将删除评论 如果代码将参数命名为n,错误消息怎么可能是关于函数MyQueue::add(T data)的? 【参考方案1】:

您的new 有语法错误。

qnode<T>* temp = new qnode;

应该是

qnode<T>* temp = new qnode<T>();

请记住,没有模板参数的模板类对编译器毫无意义。每当你输入 qnode(在初始声明之后),你也需要输入它的模板参数!

【讨论】:

以上是关于在模板类实现中使用结构模板的主要内容,如果未能解决你的问题,请参考以下文章

[数据结构]队列之顺序队列的类模板实现

6.4-数据结构&算法-模板/函数模板/类模板/特化

仅具有静态方法的模板类使用 .cpp 文件实现给出错误

Vector模板类的建立与实现

模板模式

C++初阶:模板初阶函数模板 | 类模板