shared_ptr<my_class>对象将不被接受为纯虚拟基类中的 myclass 方法参数
A shared_ptr<my_class> object will not be accepted as a myclass method argument in a pure virtual base class
我正试图在纯虚拟类中声明一个方法
class myclass
{
virtual void mymethod(const myclass_vector & arg);
virtual void abstract_method() = 0;
};
typedef std::shared_ptr<myclass> myclass_p;
typedef std::vector<myclass_p> myclass_vector;
我无法使用C++中通常使用的方法来解决循环性问题。我得到的错误,取决于我如何前向声明类和typedef(我也尝试过将它们转换为类定义),例如,"字段myclass_vector_instance具有不完整的类型myclass_vector",还有"冲突声明’错误和链接错误。
例如,
class myclass;
typedef std::shared_ptr<myclass> myclass_p;
typedef std::vector<myclass_p> myclass_vector;
class myclass
{
virtual void mymethod(const myclass_vector & arg);
virtual void abstract_method() = 0;
};
不会起作用。
我的猜测是"std::shared_ptr"需要提前知道它将指向的对象的大小
有什么想法吗?
如果您已经完成了类的前向声明。您的示例应该可以工作。例如,下面的例子是工作
#include<iostream>
#include<vector>
#include <string>
#include<memory>
using namespace std;
class myclass; //forward declaration
typedef std::shared_ptr<myclass> myclass_p;
typedef std::vector<myclass_p> myclass_vector;
class myclass
{
virtual void mymethod(const myclass_vector & arg);
virtual void abstract_method() = 0;
};
int main()
{
myclass_p A;
}
请确保您已将所有标头都放好。shared_ptr是在"include"中定义的。它应该可以正常工作。请告诉我您面临的确切错误?
相关文章:
- 子类地址等于虚拟基类地址?
- 虚拟基类函数中派生类的大小
- 虚拟基类初始化
- 虚拟基类在内部如何工作?编译器如何解析对基方法的调用?
- 返回纯虚拟基类的向量的元素
- std::is_base_of和虚拟基类
- 如何在子类中重写时调用私有虚拟基类实现
- 从两个不同类继承的非虚拟基类的访问成员
- 为什么必须由最派生的类构建虚拟基类
- 虚拟基类的派生类列表
- boost::bind 无法绑定到纯虚拟基类中定义的非静态函数模板成员类型
- 虚拟基类和继承
- (为什么)纯虚拟派生类中是否需要虚拟基类构造函数调用?
- 在派生类中使用虚拟基类的受保护的CTOR
- 私有非虚拟基类函数被称为派生类中的函数
- 虚拟基类的创建顺序
- 使用虚拟基类C++向下转换
- 为什么在派生最多的类的初始值设定项列表中显式调用虚拟基类构造函数的规则,而较老的祖先已经拥有它?
- 虚拟与纯虚拟基类函数并从DLL导出
- 在多级继承中派生的虚拟基类会发生什么