shared_ptr 到抽象基类(成员变量)是一个未声明的标识符[重复]
Posted
技术标签:
【中文标题】shared_ptr 到抽象基类(成员变量)是一个未声明的标识符[重复]【英文标题】:shared_ptr to abstract base class (member variable) is a an undeclared identifier [duplicate] 【发布时间】:2015-08-14 15:55:03 【问题描述】:以下结构应包含一个指向抽象基类 (Shape) 的 shared_ptr。但是,当我尝试写这篇文章时,我得到了error C2065: 'Shape' : undeclared identifier
。
所以我知道我不能创建 Shape 的实例,只能创建派生的 Spheres、Boxes 等实例。但是为什么我不能将 shared_ptr 用于抽象基类?
#include <memory> // std::shared_ptr
#include "shape.hpp"
struct Hit
// …
std::shared_ptr<Shape> m_shape; // Shape that was hit
;
需要注意的是,Shape 类确实使用了 Hit 结构,反之亦然。
【问题讨论】:
我猜问题可能出在shape.hpp
。
我敢打赌shape.hpp
包括hit.hpp
。
@Quentin 这是正确的。两个文件确实相互包含。
今晚在窗台上留个韭菜;)
【参考方案1】:
将上面的#include "shape.hpp"
替换为转发声明n
class Shape;
(您可能需要struct Shape;
,具体取决于Shape
的声明方式)。
这是可能的,因为std::shared_ptr
类型的类成员可以用不完整类型声明。
这可以帮助您解开圆形夹杂物。当然,为struct Hit
定义函数的源文件需要#include
shape.hpp
。
【讨论】:
在只有hit.hpp
没有cpp文件的情况下(只有构造函数和成员声明),我是离开#include "shape.hpp"
还是引入cpp文件?
为了轻松生活,请引入.cpp
文件。
当您拥有 hpp 和 cpp 文件对时,源代码将更具可读性...以上是关于shared_ptr 到抽象基类(成员变量)是一个未声明的标识符[重复]的主要内容,如果未能解决你的问题,请参考以下文章