出于某种原因,我一直在找不到"标识符"每当我尝试使用appendNode()时出错。另外,我一直收到错误,告诉我我错过了#34 ;;"之前"使用"这没有任何意义。
头文件
#ifndef INTEGERLIST_H
#define INTEGERLIST_H
#include <iostream>
using namespace std;
class IntegerList
{
private:
struct ListNode
{
int value;
struct ListNode *next;
};
ListNode *head;
public:
IntegerList()
{
head = NULL;
}
~IntegerList();
void appendNode(int);
void insertNode(int);
void deleteNode(int);
void printList() const;
}
#endif
实施档案
#include "IntegerList.h"
#include <iostream>
using namespace std;
void IntegerList::appendNode(int num)
{
ListNode *newNode;
ListNode *nodePtr;
//new allocation
newNode = new ListNode;
newNode->value = num;
newNode->next = NULL;
if (!head)
head = newNode;
else
{
nodePtr = head;
while(nodePtr->next)
nodePtr = nodePtr->next;
nodePtr->next = newNode;
}
}
void IntegerList::insertNode(int num)
{
ListNode *newNode;
ListNode *nodePtr;
ListNode *previousNode = NULL;
newNode = new ListNode;
newNode->value = num;
if(!head)
{
head = newNode;
newNode->next = NULL;
}
else
{
nodePtr = head;
previousNode = NULL;
while(nodePtr != NULL && nodePtr->value < num)
{
previousNode = nodePtr;
nodePtr = nodePtr->next;
}
if(previousNode == NULL)
{
head = newNode;
newNode->next = nodePtr;
}
else
{
previousNode->next = newNode;
newNode->next = nodePtr;
}
}
}
void IntegerList::deleteNode(int num)
{
ListNode *nodePtr;
ListNode *previousNode;
if(!head)
return;
if(head->value == num)
{
nodePtr = head->next;
delete head;
head = nodePtr;
}
else
{
nodePtr = head;
while(nodePtr != NULL && nodePtr->value != num)
{
previousNode = nodePtr;
nodePtr = nodePtr->next;
}
if(nodePtr)
{
previousNode->next = nodePtr->next;
delete nodePtr;
}
}
}
void IntegerList::printList() const
{
ListNode *nodePtr;
nodePtr = head;
while(nodePtr)
{
cout << nodePtr->value << endl;
nodePtr = nodePtr->next;
}
}
答案 0 :(得分:1)
#include
从另一个文件中直接复制,由于这是由预处理器完成的,编译器并不是真的知道这发生了,并且给出了错误,好像它只是一个大文件。所以在您的代码中(简化如下):
// header.h
class A{
// ...
}
和
// code.cpp
#include "header.h"
using namespace std;
所以这转换为:
// code.cpp
class A{
// ...
}
using namespace std;
这使错误更清晰。在;
之前需要using
,因为类声明必须以;
结尾。
答案 1 :(得分:0)
正如评论中所提到的,您在课程声明结束时错过了;
。您在实现文件中收到错误,因为在using
语句之前包含(完整复制)标头。一旦你知道自己在看什么,就会有一个完美的感觉。
答案 2 :(得分:0)
正如其他人已经说过的那样,您在标题中的类声明结尾处错过了;
。
然而,代码中更严重的问题是标题中的行using namespace std;
。这是bad practice无处不在,但在头文件中特别。甚至使用std
中的任何内容的唯一一行是printList
cout << nodePtr->value << endl;
删除using namespace std
两行,并将printList
中的行替换为:
std::cout << nodePtr->value << std::endl;
您和其他可能在以后使用您的代码的人都会感谢您。