c++ - 只允许使用静态数据成员模板
问题描述
我有两个名为 Component 和 Transform 的类。Transform 类派生自 Component 类。
组件.h:
class Component {
public:
template <typename T>
T* ptr_;
};
变换.h:
class Transform : public Component {
public:
Transform();
};
转换.cc:
Transform::Transform() {
ptr_<Transform> = this;
}
它给了我错误'error C3376:'Component::ptr_': only static data member templates are allowed'。
我究竟做错了什么?
解决方案
我究竟做错了什么?
您正在尝试声明一个非静态成员变量模板。这是错误的,正如错误消息所解释的那样。
如果ptr_
应该始终指向 type 的对象Transform
,那么它不需要是变量模板。您需要做的就是声明Transform
:
struct Transform;
struct Component {
Transform* ptr_;
};
如果Component::ptr_
应该总是指向它的派生实例,那么这是一个糟糕的设计。什么是更好的替代设计取决于您认为它ptr_
有用的原因。鉴于涉及继承,我猜测更好的解决方案涉及虚函数。
推荐阅读
- apache - 将所有请求转发到一个 index.php 文件,对于不存在的文件,但*包括* index.php 本身
- php - PHP Chmod函数不起作用
- javascript - React linter 警告:未使用的状态字段 - 在 setState 中使用状态字段时
- android - 7.0(无)以下版本的应用程序崩溃
- c# - 使用 COM 对象进行浏览器自动化 .net
- google-maps - 带和不带密钥的行驶距离 Google API
- android - 在 Android 中按类型过滤 Google Places 结果
- javascript - 实现浏览器可以使用的媒体设备
- string - 使用 if 语句在变量中查找字符串
- c# - 将系统从 32 位升级到 64 位