我收到错误“错误:在'<'之前预期的初始化程序令牌“在编译时,我需要创建一个链表,我需要将其中一个函数转换为一个赋值模板,我想知道如何修复我得到的错误。
#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 */
答案 0 :(得分:0)
从<T>
和T nodeBeg<T>(link *, T num);
移除T linked<T>::nodeBeg(link* , T num)
。T nodeBeg(link *, T num)
和T linked::nodeBeg(link* , T num)
将告诉编译器在编译时推断返回类型。此外,功能nodeBeg
和课程linked
都不是模板,因此您不需要<T>
。
答案 1 :(得分:0)
您的代码中存在一些语法错误
nodeBeg
是一个功能模板
它的声明应如下:
template <class T> T nodeBeg(link *, T num);
定义应如下:
template <class T> T linked::nodeBeg(link*, T num) {/*...*/}
在这里,你必须将linked::
附加到函数名称,告诉编译器你在这里定义类nodeBeg
的成员linked
。
答案 2 :(得分:0)
在标识符后删除<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)