如何在类的内部定义类的对象

how do I define an object of a class inside its class?

本文关键字:定义 对象 内部      更新时间:2023-10-16

我试图在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;
};

mylist.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

错误:

错误:'mylist'没有指定类型


我的问题是:哪里出了问题,正确的方法是什么?

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

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

你的代码也有循环依赖的问题。

现在,为了解决这个问题,你必须在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;
}

现场演示

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

实际上这不是你想做的一切。您尝试在mylistmlist中同时拥有my list成员。我认为你尝试使用c++中不存在的东西——纯虚成员。行

protected:
 T item = 0;
 mylist<T> next = 0;

看起来你是故意的。这也导致mlistmylist之间的相互依赖,因为你试图在mlist中拥有mylist成员,并且你试图从mlist中派生mylist

删除我上面引用的行,你的编译错误应该消失了。