shared_ptr<my_class> 对象将不会被接受为纯虚拟基 class 中的 myclass 方法参数

A shared_ptr<my_class> object will not be accepted as a myclass method argument in a pure virtual base class

我正在尝试在纯虚拟中声明一个方法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++ 中通常使用的方法解决循环问题。我得到的错误,取决于我如何转发声明 classes 和 typedef(我也尝试将它们转换为 class 定义)例如,'field 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' 需要提前知道它将指向的对象的大小。

有什么想法吗?

如果您已完成 class 的前向声明。您的示例应该有效。 例如,下面的示例正在运行

#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;
}

确保您已准备好所有 headers。shared_ptr 在 "include " 中定义。它应该可以正常工作。让我知道您遇到的确切错误?