C++ 继承自c++;用于添加更多方法的标准库列表类

C++ 继承自c++;用于添加更多方法的标准库列表类,c++,list,class,inheritance,methods,C++,List,Class,Inheritance,Methods,我需要向c++类添加一些方法。 我正在使用名为“Super_list”的继承创建一个新类,该类将继承list的所有方法,并允许我添加自己的方法 #ifndef SUPER_LIST_H #define SUPER_LIST_H #include "my_containter.h" #include <list> using namespace std; class My_Container; class Super_list: public list<My_Contain

我需要向c++类添加一些方法。 我正在使用名为“Super_list”的继承创建一个新类,该类将继承list的所有方法,并允许我添加自己的方法

#ifndef SUPER_LIST_H
#define SUPER_LIST_H

#include "my_containter.h"
#include <list>
using namespace std;

class My_Container;

class Super_list: public list<My_Container>
{
 public:
  void new_func1();
  void new_func2();
  void new_func_3();
};
#endif
\ifndef SUPER\u LIST\u H
#定义超级列表
#包括“my_containter.h”
#包括
使用名称空间std;
类myu容器;
类超级列表:公共列表
{
公众:
void new_func1();
void new_func2();
void new_func_3();
};
#恩迪夫
这就是我使用新制作的类的地方:

#ifndef my_container_H
#define my_container_H

#include <list> 
#include "super_list.h"
using namespace std;

class Super_list;

class My_container
{
 private:
  Super_list buddy;
};
#endif
\ifndef my\u container\u H
#定义我的容器
#包括
#包括“super_list.h”
使用名称空间std;
类超级用户列表;
类我的容器
{
私人:
超级伙伴名单;
};
#恩迪夫
我遇到了一系列与继承操作不正确相关的错误。 我将感谢任何帮助或完成这项任务的其他想法


谢谢:)

您有一个循环依赖关系:
MyContainer
需要了解
Super\u列表,反之亦然。你需要找到打破这种依赖的方法。请注意,在代码中,转发声明是完全多余的

还要注意的是,标准库容器

关于依赖关系,您需要修改至少一个类,以便它不需要另一个类的完整定义。假设公开继承自
std::list
是可以的,那么唯一的选择就是
My_Container
不需要
SuperList
的完整定义,让它持有一个(最好是智能的)指针:

这将允许您删除
super\u list.h
include


一个不相关的警告:在头文件中放置
using namespace std
是不好的,因为它会对所有直接或间接包含头文件的代码强制使用该using指令。这会导致各种各样的麻烦。我通常走得更远,说你不应该在任何地方使用它。在这一点上,并不是每个人都同意我的观点。

如果没有错误的话,我不能说太多

1) 您可能想在Super_list中定义一些构造函数,将它们的参数转发给std::list构造函数

2) 每次我尝试做这样的事情(或者做这样的事情),结果都是个坏主意。为了保持嵌入,您可能需要一些全局函数:

template<class T>
new_func1(std::list<T> &l)

template<class T>
new_func2(std::list<T> &l)
模板
新功能1(标准::列表和列表)
模板
新功能2(标准::列表和列表)

等等。

我想问你是否真的需要继承来获得额外的功能。尝试使用列表作为类的成员。这不仅会使类更容易更改,而且意味着使用类的代码不会关心它是否是列表


错误消息是什么?此外,“super_列表”中存储了哪些类型的对象?标准库容器没有虚拟析构函数,因此不能从中继承。我建议使用具有列表成员的类,或者使需要的函数成为具有列表参数的自由函数。“…找到一种打破依赖性的方法”。除了转发声明,还能做什么?@Evgeni转发声明在代码中完全没有任何作用。包含了头,没有它代码也无法编译。设计必须有相当大的改变,如何做到这一点取决于OP的目标。在我的情况下,它似乎总是打破循环。它总是在用其成员“注册”封闭类时出现。@Evgeni使用此代码,您不能向前声明类。每个人都需要对方的完整声明。谢谢,我现在也看到了。但是为什么
列表
“不正常”?只要我正确地记得它的
列表
T*
作为成员?我喜欢你提供的支持该方法的信息!
template<class T>
new_func1(std::list<T> &l)

template<class T>
new_func2(std::list<T> &l)