这是一个关于我似乎遇到的问题的更具体的问题。基本上,指令是使用STL(而不是链表)创建列表。在示例中,我看到的内容如下:
#include <vector>
#include <iterator>
vector<char> container = { 'A','B','C','D','E' };
cout << "Print vector using an iterator: ";
vector<char>::iterator iter = container.begin();
while (iter != container.end())
{
cout << *iter << " ";
++iter;
}
cout << endl; // OUTPUT: A B C D E
当我尝试在我的任务的Main.cpp文件中执行时:
#include "AnyList.h"
#include <iostream>
#include <vector>
#include <iterator>
using namespace std;
int main()
{
AnyList list1, list2;
list1.insertFront(10);
list1.insertFront(11);
list1.insertFront(12);
list1.insertFront(13);
list1.insertFront(14);
list<int>::const_iterator iter = list1.begin();
AnyList.h
#ifndef ANYLIST_H
#define ANYLIST_H
#include<iostream>
#include <string>
#include <list>
#include <vector>
#include <iterator>
class AnyList
{
public:
AnyList();
int getNumOfElem() const;
void insertFront(int data);
void forwardPrint();
private:
list<int> *ptr;
};
#endif
AnyList.cpp
#include "AnyList.h"
#include <vector>
#include <iterator>
AnyList::AnyList()
{
}
int AnyList::getNumOfElem() const
{
return static_cast<int>(ptr->size());
}
void AnyList::insertFront(int data)
{
ptr->push_front(data);
}
void AnyList::forwardPrint()
{
list<int>::const_iterator i;
for (i = ptr->begin(); i != ptr->end(); ++i)
{
cout << *i << " ";
cout << endl;
}
}
在主文件中,为行:
list :: const_iterator iter = list1.begin();
我收到错误消息说&#34;开始&#34;不是AnyList的成员。我查了一下这个问题是什么,看起来它似乎是由于list1不是一个真正的容器?从它看起来它应该是insertFront创建的列表的容器,但它没有识别它。
列表的实施方式是否有错误?或者insertFront未正确完成?实际上,我试图用该行运行程序的全部原因是看看insertFront是否正常工作,但是现在我不知道错误在哪里。我见过的大多数例子都是在一个文件中声明的,而不必在一个类中实现它,所以这个赋值在这一点上非常混乱。
还要澄清一些潜在的误解: - AnyList类,私有成员变量和getNumOfElem函数已包含在文件中,getNumOfElem作为实际实现示例提供。
编辑:我还需要一些关于如何正确初始化变量的帮助&#34; ptr&#34;在这里,因为据说这也可能是阻止这一切发挥作用的问题。
答案 0 :(得分:0)
AnyList list1, list2;
list<int>::const_iterator iter = list1.begin();
此代码调用begin()
对象的list1
方法。 list1
是AnyList
类的实例。
要使其正常工作,AnyList
类必须实现一个名为begin()
的类方法,该方法返回list<int>::const_iterator
。
问题中显示的AnyList
类的声明表明此类未实现任何名为begin()
的方法。 AnyList
类仅实现三个类方法,名为getNumOfElem()
,insertFront()
和forwardPrint()
。
容器不是C ++中的某种自动魔法概念,它可以自动适用于任何类。容器只是它自己的普通类(模板类,但这里不相关),使用普通方法。
如果AnyList
类应该像容器一样运行,并且可以使用其他可以与容器一起使用的C ++库算法和模板,那么AnyList
类必须满足C ++容器的所有要求,其中包括定义自己的begin()
和end()
方法以及其他方法,以及定义一些内部类型。