如何在类的内部定义类的对象
how do I define an object of a class inside its class?
我试图在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对象。
实际上这不是你想做的一切。您尝试在mylist
和mlist
中同时拥有my list
成员。我认为你尝试使用c++中不存在的东西——纯虚成员。行
protected:
T item = 0;
mylist<T> next = 0;
看起来你是故意的。这也导致mlist
和mylist
之间的相互依赖,因为你试图在mlist
中拥有mylist
成员,并且你试图从mlist
中派生mylist
。
删除我上面引用的行,你的编译错误应该消失了。
相关文章:
- 自定义对象的dlib序列化在gcc中失败
- 如何将带有自定义对象的容器从C++传递到QML
- 直接在 unordered_map 的方法中使用哈希,而不是生成哈希的用户定义对象
- 如何使用Q_PROPERTY公开自定义对象列表
- 如何在自定义对象的<<运算符中添加自定义前缀
- 将自定义对象作为参数从目标 C 传递到 C++
- 如何使用构造函数声明指向用户定义对象的指针?
- 使用自定义对象声明shared_ptr数组时出现错误 C2664
- 在具有自定义对象的集合中查找值
- std::set 不会检测到重复的自定义对象
- 如何使用自定义对象的序列化在 c++ 中编写自定义二进制文件处理程序
- std::排序为排序自定义对象时出现的向量引发错误
- 如何通过引用对用户定义对象的类型集 (STL) 的数组元素进行增强迭代?
- 具有自定义对象的C 优先级队列
- 自定义对象构造函数在循环外部循环
- 带有自定义对象的C 范围循环
- 为什么不允许通过 decltype(lamda) 定义对象,我该如何改进它?
- 如何正确地将规则 5(或零?)应用于包含带有字符串的自定义对象向量的类
- 编写安全包装类以管理用户定义对象的指针
- 如何在包含自定义对象的容器中使用分区函数C++