我试图在纯虚拟类中声明一个方法
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'需要提前知道它将指向的对象的大小。
有什么想法吗?
答案 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”中定义。它应该正常工作。让我知道您所面临的确切错误?