当我尝试使用结构模板作为拒绝时,为什么会出现以下错误? 我想用C++模拟java中的链表,用链表作为我的考试的一种学习方法。
这是我到目前为止写的 这是头文件当我尝试使用结构模板作为拒绝时,为什么会出现以下错误? 我想用C++模拟java中的链表,用链表作为我的考试的一种学习方法。,c++,visual-studio,templates,struct,linked-list,C++,Visual Studio,Templates,Struct,Linked List,这是我到目前为止写的 这是头文件 #ifndef ArrayList_H #define ArrayList_H #include "ArrayListNode.h" template<class T> class ArrayList { private: ArrayListNode<T>* head; int length; public: ~ArrayList(); //Destructor. ArrayList();
#ifndef ArrayList_H
#define ArrayList_H
#include "ArrayListNode.h"
template<class T>
class ArrayList
{
private:
ArrayListNode<T>* head;
int length;
public:
~ArrayList(); //Destructor.
ArrayList(); //Constructor.
void add(T); //Append an element at the last position.
void display(); //Display all element in the list.
void remove(int); //Remove element at specify index
void clear(); //Remove all the elements from the list.
T get(int); //Return the element at the specified position.
bool isEmpty(); //Return true if this list contains no elements.
int size(); //Return the length of the list.
};
#endif
\ifndef ArrayList\u H
#定义数组列表
#包括“ArrayListNode.h”
模板
类数组列表
{
私人:
ArrayListNode*头;
整数长度;
公众:
~ArrayList();//析构函数。
ArrayList();//构造函数。
void add(T);//在最后一个位置追加一个元素。
void display();//显示列表中的所有元素。
void remove(int);//删除指定索引处的元素
void clear();//从列表中删除所有元素。
T get(int);//返回指定位置的元素。
bool isEmpty();//如果此列表不包含任何元素,则返回true。
int size();//返回列表的长度。
};
#恩迪夫
现在,这是实现文件:
template<class T>
ArrayList<T>::ArrayList()
{
head = nullptr;
length = 0;
}
template<class T>
ArrayList<T>::~ArrayList()
{
ArrayListNode<T>* traverse = head;
ArrayListNode<T>* nextNode;
while (traverse != nullptr)
{
nextNode = traverse->next;
delete traverse;
traverse = nextNode;
}
}
template<class T>
void ArrayList<T>::add(T item)
{
if (head == nullptr)
{
head = new ArrayListNode;
head->item = item;
head->next = nullptr;
}
else
{
ArrayListNode<T>* traverse = head;
ArrayListNode<T>* newNode = new ArrayListNode;
newNode->item = item;
newNode->next = nullptr;
//Find the last node in the list
while (traverse->next)
{
traverse = traverse->next;
}
traverse->next = newNode;
}
}
template<class T>
void ArrayList<T>::display()
{
if (head == nullptr)
return;
else
{
ArrayListNode<T>* traverse = head;
while (traverse->next)
{
cout<< traverse->item << endl;
traverse = traverse->next;
}
}
}
template<class T>
void ArrayList<T> ::remove(int index)
{
}
template<class T>
void ArrayList<T>::clear()
{
}
template<class T>
T ArrayList<T>::get(int index)
{
return;
}
template<class T>
bool ArrayList<T>::isEmpty()
{
}
template<class T>
int ArrayList<T>::size()
{
return length;
}
模板
ArrayList::ArrayList()
{
水头=零PTR;
长度=0;
}
模板
ArrayList::~ArrayList()
{
ArrayListNode*导线=头部;
ArrayListNode*nextNode;
while(遍历!=nullptr)
{
nextNode=遍历->下一步;
删除导线;
遍历=下一个节点;
}
}
模板
void ArrayList::添加(T项)
{
if(head==nullptr)
{
head=新的ArrayListNode;
标题->项目=项目;
head->next=nullptr;
}
其他的
{
ArrayListNode*导线=头部;
ArrayListNode*newNode=新建ArrayListNode;
新建节点->项目=项目;
newNode->next=nullptr;
//查找列表中的最后一个节点
while(遍历->下一步)
{
遍历=遍历->下一步;
}
遍历->下一步=新节点;
}
}
模板
void ArrayList::display()
{
if(head==nullptr)
返回;
其他的
{
ArrayListNode*导线=头部;
while(遍历->下一步)
{
接下来是库蒂坦;
}
}
}
模板
void ArrayList::remove(int索引)
{
}
模板
void ArrayList::clear()
{
}
模板
T ArrayList::get(int索引)
{
返回;
}
模板
bool ArrayList::isEmpty()
{
}
模板
int-ArrayList::size()
{
返回长度;
}
到目前为止。。。我只创建了构造函数、析构函数和display来显示列表中的项。我还创建了add函数来追加项
在最后一个位置。其他方法都是空的。但是我从add函数得到一个错误
这是类的结构
template<class T>
struct ArrayListNode
{
T item; //To hold any data.
ArrayListNode<T>* next; //To point to the next node
};
#include <iostream>
#include "ArrayList.h"
#include "ArrayList.cpp"
using namespace std;
int main()
{
ArrayList<int> list;
list.add(5);
list.display();
return 0;
}
模板
结构ArrayListNode
{
T item;//保存任何数据。
ArrayListNode*next;//指向下一个节点
};
这是本课程的主要内容
template<class T>
struct ArrayListNode
{
T item; //To hold any data.
ArrayListNode<T>* next; //To point to the next node
};
#include <iostream>
#include "ArrayList.h"
#include "ArrayList.cpp"
using namespace std;
int main()
{
ArrayList<int> list;
list.add(5);
list.display();
return 0;
}
#包括
#包括“ArrayList.h”
#包括“ArrayList.cpp”
使用名称空间std;
int main()
{
数组列表;
增加(5);
list.display();
返回0;
}
现在,当我在没有add函数的情况下编译程序时,它会正确编译。然而,一旦我调用add函数,我会得到以下错误
c:\users\julio\documents\visual studio 2017\projects\arraylist\arraylist.cpp(31): error C2955: 'ArrayListNode': use of class template requires template argument list
1>c:\users\julio\documents\visual studio 2017\projects\arraylist\arraylistnode.h(5): note: see declaration of 'ArrayListNode'
1>c:\users\julio\documents\visual studio 2017\projects\arraylist\arraylist.cpp(28): note: while compiling class template member function 'void ArrayList<int>::add(T)'
1> with
1> [
1> T=int
1> ]
1>c:\users\julio\documents\visual studio 2017\projects\arraylist\main.cpp(9): note: see reference to function template instantiation 'void ArrayList<int>::add(T)' being compiled
1> with
1> [
1> T=int
1> ]
1>c:\users\julio\documents\visual studio 2017\projects\arraylist\main.cpp(7): note: see reference to class template instantiation 'ArrayList<int>' being compiled
1>c:\users\julio\documents\visual studio 2017\projects\arraylist\arraylist.cpp(31): error C2512: 'ArrayListNode': no appropriate default constructor available
1>c:\users\julio\documents\visual studio 2017\projects\arraylist\arraylist.cpp(38): error C2512: 'ArrayListNode': no appropriate default constructor available
c:\users\julio\documents\visual studio 2017\projects\arraylist\arraylist.cpp(31):错误C2955:“arraylist节点”:使用类模板需要模板参数列表
1> c:\users\julio\documents\visualstudio 2017\projects\arraylist\arraylistnode.h(5):注意:请参见“arraylistnode”的声明
1> c:\users\julio\documents\visual studio 2017\projects\arraylist\arraylist.cpp(28):注意:编译类模板成员函数“void arraylist::add(T)”时
1> 与
1> [
1> T=int
1> ]
1> c:\users\julio\documents\visualstudio 2017\projects\arraylist\main.cpp(9):注意:请参阅正在编译的函数模板实例化“void arraylist::add(T)”的参考
1> 与
1> [
1> T=int
1> ]
1> c:\users\julio\documents\visual studio 2017\projects\arraylist\main.cpp(7):注意:请参阅正在编译的类模板实例化“arraylist”的参考
1> c:\users\julio\documents\visual studio 2017\projects\arraylist\arraylist.cpp(31):错误C2512:“arraylist节点”:没有合适的默认构造函数可用
1> c:\users\julio\documents\visual studio 2017\projects\arraylist\arraylist.cpp(38):错误C2512:“arraylist节点”:没有合适的默认构造函数可用
head=newarraylistnode
缺少模板参数。你也应该读一下三法则。@DanielJour是的,我知道三法则。。你需要复制构造函数、析构函数,并重载赋值运算符=@ Daieljou-Hi,我不需要它,因为我有一个条件,如果它是NULL,则创建新节点,否则,添加一个新节点。“使用链表模拟C++中的java的ARAYLIST”-你想通过在C++中编写一些完全无关的代码来研究java集合类吗?为什么?如果您想学习Java集合类,那么一定要使用Java。比较java集合类和C++容器类是徒劳的,因为典型C++容器(标准的以及你自己制作的)拥有他们的内容,而java集合存储指向其所有者可以共享的内容的指针。@ ChristianHackl,我只想用链表来实践…下一个考试是用C++连接链表,因为我已经知道了java,我想做一些操作,比如Add、Cube、Delphi和一些ON。碰巧我喜欢ArrayList这个名字,并且从ArrayList类中得到了一些方法的名字。