没有参数列表的模板名称“ ”的使用无效

Posted

技术标签:

【中文标题】没有参数列表的模板名称“ ”的使用无效【英文标题】:Invalid use of template name ' ' without an argument list 【发布时间】:2021-06-09 10:09:12 【问题描述】:

我正在尝试使用 C++ 中的链表创建简单的堆栈。突然我遇到了(我认为)与模板有关的问题。我缺乏这种结构的知识,这就是为什么我试图创造一些东西并用它来学习。 我的问题是node * top; 我应该改变什么?任何想法? 我的代码是:

#include <iostream>
#include <cstdlib>

using namespace std;

template<typename T>

class node 
public:
  T object;
  node * next;
;

node *top = NULL;

template<typename T>
class Stack

public:
  void push(T obj);
  void pop();
  void display(ostream & out) const;
;

void Stack :: push(T obj)

  node * tempNode = new node;
  tempNode->object = obj;
  tempNode->next = top;
  top = tempNode;


void Stack :: display(ostream & out) const

    if(top == NULL)
      cout << "Stack is Empty"<<endl;
      return;
     
     else

       node *temp = top;
       while(temp!=NULL)

         cout << "Here is your elements :"<<"\n";
         cout << temp->object<<endl;
         temp = temp->next;
       
       cout <<endl;
     


void Stack :: pop()

  if (top = NULL)
    cout << "List is Empty"<<endl;
    return;
  

  cout << "Your object: "<<top->object << " is removed"<<endl;
  top = top->next;


ostream & operator << (ostream & out, const Stack & s)
  s.display(out);
  return out;

【问题讨论】:

请在问题中包含编译器错误消息。 无意冒犯,但一般来说,不建议猜测 c++ 语法。猜测模板的语法几乎是不可能的 请包括样本输入和输出(预期和当前);显示的任何错误。阅读how to ask a good question node是模板,每次使用都必须使用&lt;&gt;指定模板参数。在某些情况下(从 C++17 开始)编译器可以推断模板参数,但在任何地方添加 &lt;T&gt; 会更容易。 【参考方案1】:

我猜top 应该是Stack 的成员而不是全局变量?还需要指定node的模板类型:

template<typename T>
class Stack
  node<T> *top = NULL;

public:
  void push(T obj);
  void pop();
  void display(ostream & out) const;
;

当定义模板类的方法时,你需要为类指定模板类型:

template<typename T>
void Stack<T> :: push(T obj)

您的&lt;&lt; 运算符也需要是一个模板:

template<typename T>
ostream & operator << (ostream & out, const Stack<T> & s)
  s.display(out);
  return out;

【讨论】:

以上是关于没有参数列表的模板名称“ ”的使用无效的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个嵌套的可变参数模板是无效参数?

没有函数模板“max”的实例与参数列表参数类型匹配是 (int, int)

Eclipse CDT - 使用模板默认值时出现“无效参数”

模板参数无效(唯一指针)

模板参数无效;不能出现在常量表达式中

c++typename