我正在尝试使用C ++编程语言构建一个链接列表应用程序。继承等功能
我拆分界面&在不同的文件中实现但无法编译。
以下是文件列表
接口文件: - node.h,abstractList.h,singleLinkedList.h
实施文件:singleLinkedList.cpp
node.h
#ifndef NODE_H
#define NODE_H
#include <iostream>
struct nodeType {
int data;
struct nodeType *next;
}listNode;
#endif
abstractList.h
#ifndef ABSTRACT_LIST_H
#define ABSTRACT_LIST_H
#include <iostream>
#include "node.h"
#include "singleLinkedList.h"
class abstractList {
public:
virtual ~abstractList();
virtual bool isEmpty(Node* ) = 0;
virtual int get(const int&) = 0;
virtual int indexOf(const int& ) = 0;
virtual Node insert(const int& , const int& ) = 0;
virtual void delete(const int& ) = 0;
};
#endif
singleLinkedList.h
#ifndef SINGLE_LIST_H
#define SINGLE_LIST_H
#include <iostream>
#include "node.h"
#include "abstractList.h"
class singleLinkedList : public abstractList {
public:
singleLinkedList();
~singleLinkedList();
Node populateList( );
private:
void checkIndex();
int data;
Node head;
};
#endif
到目前为止,我刚刚在实现文件中编写了populateList()函数,这里是实现文件。
singleLinkedList.cpp
#include <iostream>
#include "node.h"
#include "singleLinkedList.h"
#include "abstractList.h"
Node singleLinkedList :: populateList()
{
Node temp;
int data;
temp = head;
char ch;
std::cout<<"Enter Data? (y/n) " << std::endl;
std::cin>>ch;
while(ch == 'Y' || ch == 'y')
{
std::cout<<"Enter the data that you would like to store.\n"<<std::endl;
std::cin>>data;
temp = new Node();
temp->data = data;
temp->next = head;
head = temp;
std::cout<<"Enter more data?"<<std::endl;
std::cin>>"\n">>ch;
}
return temp;
}
当我给g ++ -c singleLinkedList.cpp时,我遇到了很多错误。我很确定我做了些蠢事。任何人都可以指出我的错误吗?
编辑:错误日志有特定问题。
struct nodeType {
int data;
struct nodeType *next;
}listNode;
虚拟listNode * insert();
以上陈述是否正确?
由于 凯利
答案 0 :(得分:1)
delete
是C ++中的关键字,您不能将其用作方法名称。您需要在此处使用其他名称:
class abstractList {
public:
//...
virtual void delete(const int& ) = 0;
//-----------^^^^^^ rename this.
};
答案 1 :(得分:1)
问题在于你的typedef:
typedef listNode *Node;
表示Node
的所有实例都将基本上由listnode*
temp = new Node();
实际上是
temp = new listnode*();
但是new Foo()
会返回一个Foo *(因为new返回指向为对象分配的内存的指针),这意味着new listnode*()
将返回listnode**
。 temp
成为listnode*
并不知道listnode**
是什么并抱怨。
你想要做的是:
Node temp = new listnode();
或完全忘记typedef:
listnode* temp = new listnode();