gpt4 book ai didi

c++ - 如何在其类中定义类的对象?

转载 作者:行者123 更新时间:2023-11-28 06:44:11 26 4
gpt4 key购买 nike

我试图在 mylist 类中定义一个 mylist 的对象。

这是我的代码:

mlist.h

#ifndef MLIST_H
#define MLIST_H

#endif // MLIST_H

#include "mylist.h"

template <class T> class mlist
{
protected:
T item = 0;
mylist<T> next = 0;
};

我的列表.h

#ifndef MYLIST_H
#define MYLIST_H

#include "mlist.h"

template <class T> class mylist : mlist<T>
{
private:
T item;
mylist<T>* next;

// --- some functions ---

};

#endif // MYLIST_H

错误:

error: 'mylist' does not name a type

mylist next = 0;

我的问题:出了什么问题,这样做的正确方法是什么?

最佳答案

您不能在其定义中定义类的具体对象,因为在编译器看到对象定义时,它对其类一无所知。

但是,您可以在类的定义中定义指向同一类对象的指针。

您的代码还存在循环依赖问题。

现在,为了解决这个问题,您必须在定义template class mlist 之前转发声明template class mylist。但是,如果这样做,则会引入另一个问题,即在 class mlist 的定义中不能有 class mylist 的具体对象。同样,这可以通过在 class mlist 的定义中定义一个指向 class mylist 的对象的指针来解决:

template<class T> class mylist;

template <class T>
class mlist {
protected:
T item;
mylist<T>* next;
};

template <class T>
class mylist : mlist<T> {
T item;
mylist<T>* next;
};

int main() {
mylist<int> lst;
(void) lst;
}

LIVE DEMO

关于c++ - 如何在其类中定义类的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25335100/

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