gpt4 book ai didi

c++ - 在 C++ 中,如何在另一个嵌套类中使用嵌套类类型(两个嵌套类在同一个外部类下)

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:11:50 26 4
gpt4 key购买 nike

我有一个 List 类,它有两个嵌套类:ListItemListIterator。在 ListIterator 类中,我有一个 ListItem 类型的属性。在头文件“List.h”中,我将 ListItem 定义为类 ListIterator 的私有(private)属性,并且它可以完美编译。但是,在“List.cpp”文件中,当我尝试定义 ListIterator 的构造函数时,出现错误:

List.cpp: In constructor ‘List::ListIterator::ListIterator(bool)’:
List.cpp:24:46: error: no matching function for call to ‘List::ListItem::ListItem()’
List::ListIterator::ListIterator(bool reverse){
^
List.cpp:24:46: note: candidates are:
List.cpp:7:1: note: List::ListItem::ListItem(void*)
List::ListItem::ListItem(void* data){
^
List.cpp:7:1: note: candidate expects 1 argument, 0 provided
In file included from List.cpp:1:0:
List.h:2:8: note: List::ListItem::ListItem(const List::ListItem&)
class ListItem {
^
List.h:2:8: note: candidate expects 1 argument, 0 provided

这是我的 List.h 文件:

class List{
class ListItem {
public:
ListItem(void*);
void* getData();
ListItem* getNext();
ListItem* getPrev();
private:
void* data;
ListItem* next;
ListItem* prev;
};

class ListIterator {
public:
ListIterator(bool);
bool hasNext();
void* next();
private:
bool reverse;
ListItem current;
};
public:

List();
~List();
long getSize();
int addData(void*);
void* remove(long);
long indexOf(void*);
ListIterator* cellAt(long);
ListIterator& iterator(bool);
private:
long size;
ListItem head;
ListItem tail;
};

这是我的 List.cpp 文件:

#include "List.h"
#include <iostream>

using namespace std;

/* ListItem */
List::ListItem::ListItem(void* data){
this->data = data;
}

void* List::ListItem::getData(){
return this->data;
}

List::ListItem* List::ListItem::getNext(){
return this->next;
}

List::ListItem* List::ListItem::getPrev(){
return this->prev;
}

/* ListIterator */
List::ListIterator::ListIterator(bool reverse){
this->reverse = reverse;
}

bool List::ListIterator::hasNext(){
return false;
}

void* List::ListIterator::next(){
return NULL;
}

最佳答案

您的问题不在于类嵌套,而在于成员初始化。

当构建一个 ListIterator 时,您也在构建它的成员,所以一个 ListItem,那么您需要为它指定一个 ctor 调用,因为它有一个用户定义的:

List::ListIterator::ListIterator(bool b) : current(something) {
...
}

这是表达current如何被初始化的方式。

关于c++ - 在 C++ 中,如何在另一个嵌套类中使用嵌套类类型(两个嵌套类在同一个外部类下),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40106222/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com