链表:错误:令牌之前的预期初始值设定项'<'

Linked List: error: expected initializer before '<' token

本文关键字:lt 令牌 错误 链表      更新时间:2023-10-16

编译时收到错误"错误:'<'标记之前的预期初始值设定项",我需要创建一个链表,我需要将其中一个函数转换为赋值的模板,我想知道如何解决我收到的错误。

#ifndef LINK_H
#define LINK_H
class link {
public:
    int data;
    link *lnkPtr;
};

class linked
{
private:    
      link  *head;
public:
        linked(){head = nullptr;}
        ~linked(){};
        void nodeEnd(link *, double num);
        template <class T>
        T nodeBeg<T>(link *, T num);
        void nodeIst(link *, double num);
        void nodeDel(link *, double num);
        link fillLst(int);
        void prntLst(link *);
        void destLst(link *);
        link endLst(link *);
        //void addlink(link *, int);
};
  template <class T>
  T linked<T>::nodeBeg(link* , T num)
{
     link *newNode; // To point to a new node 
     link *nodePtr; // To move through the list 
     // Allocate a new node and store num there. 
     newNode = new link; 
     newNode->data = num; 
     newNode->lnkPtr = nullptr; 
     // If there are no nodes in the list 
     // make newNode the first node.
      if (!head) 
         head = newNode; 
      else // Otherwise, insert newNode at end. 
      { 
         // Initialize nodePtr to head of list. 
         nodePtr = head; 
         // Find the last node in the list. 
         // while (!nodePtr->linkPtr) 
            nodePtr = nodePtr->lnkPtr; 

         nodePtr->lnkPtr = head; //inserts at beginning
      } 
}
#endif /* LINK_H */

T nodeBeg<T>(link *, T num);T linked<T>::nodeBeg(link* , T num)中删除<T>T nodeBeg(link *, T num)T linked::nodeBeg(link* , T num) 将告诉编译器在编译时推断返回类型。此外,函数nodeBeg和类linked都不是模板,因此您不需要<T>

删除标识符后面的<T>。 id 是专用化之后的参数列表意味着模板专用化。

类的模板和成员模板

是两个不同的东西..成员可以是模板类中的模板,也可能不是,或者类可能是模板。 如果模板类的成员是模板,它有两个参数列表。

template<typename T1>
struct string {
    // member template function
    template<typename T2>
    int compare(const T2&);
    // constructors can be templates too
    template<typename T2>
    string(const std::basic_string<T2>& s) { /*...*/ }
};
// out of class definition of string<T1>::compare<T2> 
template<typename T1> // for the enclosing class template
template<typename T2> // for the member template
int string<T1>::compare(const T2& s) { /* ... */ }

(从 http://en.cppreference.com/w/cpp/language/member_template (

代码中存在一些语法错误。
nodeBeg是一个函数模板。
它的声明应如下所示:

template <class T> T nodeBeg(link *, T num);

定义应如下:

template <class T> T linked::nodeBeg(link*, T num) {/*...*/}

在这里,您必须将linked::附加到函数名称,以告诉编译器您在此处定义类linked的成员nodeBeg