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 " 中定义。它应该可以正常工作。让我知道您遇到的确切错误?
我正在尝试在纯虚拟中声明一个方法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 " 中定义。它应该可以正常工作。让我知道您遇到的确切错误?