首页 > 解决方案 > 只允许使用静态数据成员模板

问题描述

我有两个名为 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'。

我究竟做错了什么?

标签: c++

解决方案


我究竟做错了什么?

您正在尝试声明一个非静态成员变量模板。这是错误的,正如错误消息所解释的那样。

如果ptr_应该始终指向 type 的对象Transform,那么它不需要是变量模板。您需要做的就是声明Transform

struct Transform;

struct Component {
    Transform* ptr_;
};

如果Component::ptr_应该总是指向它的派生实例,那么这是一个糟糕的设计。什么是更好的替代设计取决于您认为它ptr_有用的原因。鉴于涉及继承,我猜测更好的解决方案涉及虚函数。


推荐阅读