在纯虚基类中,不会将shared_ptr <my_class>对象接受为myclass方法参数

时间:2015-12-17 00:39:40

标签: c++ parameter-passing shared-ptr circular-dependency pure-virtual

我试图在纯虚拟类中声明一个方法

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(我也试图将这些转换为类定义),例如,' field myclass_vector_instance has incomplete type 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'需要提前知道它将指向的对象的大小。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

如果您已经完成了该类的前向声明。您的示例应该可行。 例如,以下示例正在运行

#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”中定义。它应该正常工作。让我知道您所面临的确切错误?