<如何是语法错误?
How is < a syntax error?
#include <iostream>
using namespace std;
template <typename E>
class SNode{
E elem;
SNode<E>* next;
friend class SLINKEDList <E>;
};
template <typename E>
class SLinkedList { // a singly linked list
public:
SLinkedList(); // empty list constructor
~SLinkedList(); // destructor
bool empty() const; // is list empty?
const E& front() const; // return front element
void addFront(const E& e); // add to front of list
void removeFront(); // remove front item list
private:
SNode<E>* head; // head of the list
};
template <typename E>
SLinkedList<E>::SLinkedList() // constructor
: head(NULL) { }
template <typename E>
bool SLinkedList<E>::empty() const // is list empty?
{
return head == NULL;
}
template <typename E>
const E& SLinkedList<E>::front() const // return front element
{
return head−>elem;
}
template <typename E>
SLinkedList<E>::~SLinkedList() // destructor
{
while (!empty()) removeFront();
}
template <typename E>
void SLinkedList<E>::addFront(const E& e) { // add to front of list
SNode<E>* v = new SNode<E>; // create new node
v−>elem = e; // store data
v−>next = head; // head now follows v
head = v; // v is now the head
}
template <typename E>
void SLinkedList<E>::removeFront() { // remove front item
SNode<E>* old = head; // save current head
head = old−>next; // skip over old head
delete old; // delete the old head
}
int main(){
return 0;
}
我从我的数据结构书(Goodman)中复制了这个节点代码,它有错误,但我不确定为什么。我确实尝试手动键入它以查看它是否是字符编码问题,但似乎并非如此。我也尝试定义SLinkedLists,但这并没有改变结果。错误:
错误1 错误 C2059:语法错误:"<"
错误2 错误 C2238:在";"之前出现意外标记
在原始代码中,该文件中的任何位置都没有定义SLINKEDList
,也不应在唯一包含的文件中定义,iostream
。
事实上,g++
也会抱怨,但有一个不同的错误:
qq.cpp:8:15: error: ‘SLINKEDList’ is not a class template
friend class SLINKEDList <E>;
^
我的建议是包含定义SLINKEDList
所需的任何头文件或代码,这应该可以解决您的直接问题。
在更新的代码中,您可以定义它,但在使用它之后,您仍然会遇到相同的问题 - 它没有定义在应有的位置。无论如何SLINKEDList
与SLinkedList
不同,因此您也需要修复它。
你可以通过以下方法做到这一点:
template <typename E>
class SNode{
E elem;
SNode<E>* next;
friend class SLINKEDList <E>;
};
到:
template <typename E> class SLinkedList;
template <typename E> class SNode{
E elem;
SNode<E>* next;
friend class SLinkedList <E>;
};
您只需从好友声明中删除<E>
。
friend class SLINKEDList;
如果您想知道为什么要考虑阅读本文。
这段代码有很多问题。
至少在我看来,SNode
实际上应该是SLinkedList
内部的嵌套类(因为,除其他外,链表类之外的任何内容都不知道它的存在)。其次,它尝试将一个名为 SLINKDEDList
的类声明为友元,但代码中不存在这样的类 - 它应该是SLinkedList
的(C++区分大小写)。第三,朋友声明应该只是SLinkedList
,而不是SlinkedList<E>
。
但是,如果你将节点类嵌套在链表类中,你根本不需要友元声明,所以结果是这样的:
template <typename E>
class SLinkedList { // a singly linked list
struct SNode{
E elem;
SNode *next;
};
public:
SLinkedList(); // empty list constructor
~SLinkedList(); // destructor
bool empty() const; // is list empty?
const E& front() const; // return front element
void addFront(const E& e); // add to front of list
void removeFront(); // remove front item list
private:
SNode *head; // head of the list
};
你也有一些地方有类似的东西 v− > elem
.这需要更改为类似 v->elem
才能工作。虽然您可以在-
之前或之后添加更多空格>
,但-
和>
之间不能有空格。它必须键入->
,而不是- >
才能被识别为"指针指向"运算符。
- 为什么包含windows.h会产生语法错误,从而阻止类的实例化?(C2146,C2065)
- 错误 C2760:语法错误:映射迭代器上意外的标记"标识符",预期的";"
- 为什么我会收到错误 C2143 语法错误:缺少"*"之前的';'?
- 奇怪的代码抛出编译错误模板< J,int aSize=10> C2143:语法错误:在"<"之前缺少";"
- "错误 C0000:语法错误,令牌"<EOF>"处出现意外$end,并且不确定
- 我该怎么做才能摆脱使用命名空间时的语法错误?
- 如何摆脱错误c2061;语法错误 cout?
- 语法错误:D3DX10Core 中的标识符'TEXTMETRICA'
- 错误 C2146:语法错误:标识符"A1"之前缺少","
- main.cpp(11):错误 C2059:语法错误:"字符串"
- RedisGraph 语法错误在偏移量 8 靠近"创建"
- 如何修复此 FSM C++语法错误 C3867
- 函数错误 C2059:语法错误:'>'不起作用
- 为什么在main()之前断言会导致语法错误"error: expected ')' before numeric constant"?
- c++default-int中的语法错误
- "pip install openexr"上的语法错误:错误的编译器?
- 为什么我收到语法错误:在"*"之前缺少";"
- 错误 C2059:语法错误:从结构成员声明'constant'
- C++语法错误,编译器不会警告或 int v = func(&v) 出错;
- 我正在调试这个C++程序.编译器不再显示语法错误,但存在隐藏的逻辑错误