3

我在使用 C++ 模板时遇到问题。这是对我正在尝试做的事情的解释,以便每个人都可以更好地理解我的问题。

我的框架有一个基类 ,Component并且我的框架的用户将派生Component以创建具体ComponentsTransformComponentAudioComponent。AComponentComposite存储给定用户创建的所有具体s 的列表。 Component

我正在尝试存储具体Componentsviaboost::anyboost::any_casts 的列表。

ComponentComposite以下是我的清单中的两种方法boost::any

    class ComponentComposite {

        public:
            ComponentComposite();
            template<class T> bool addComponent(T* component);
            template<class T> T* getComponent();

        private:
            QList<boost::any*>* m_components;
    }

这是 a 的示例代码GameObject,它是 a ComponentComposite。我正在尝试将两个Components 添加到GameObject,然后我尝试访问Component添加的两个 s。这样做将是ComponentComposite.

    GameObject::GameObject() : ComponentComposite()
    {
        addComponent<Components::AudioComponent>(new Components::AudioComponent());
        addComponent<Components::TransformComponent>(new Components::TransformComponent());
        Components::TransformComponent* transform= getComponent<Components::TransformComponent>();
        Components::AudioComponent* audio= getComponent<Components::AudioComponent>();
    }

这样做会引发四个错误(每个函数调用一个错误):

  1. ...undefined reference to `bool BalaurEngine::Composites::ComponentComposite::addComponent<BalaurEngine::Components::AudioComponent>(BalaurEngine::Components::AudioComponent*)'
  2. ...undefined reference to `bool BalaurEngine::Composites::ComponentComposite::addComponent<BalaurEngine::Components::TransformComponent>(BalaurEngine::Components::TransformComponent*)'
  3. ...undefined reference to `BalaurEngine::Components::TransformComponent* BalaurEngine::Composites::ComponentComposite::getComponent<BalaurEngine::Components::TransformComponent>()'
  4. ...undefined reference to `BalaurEngine::Components::AudioComponent* BalaurEngine::Composites::ComponentComposite::getComponent<BalaurEngine::Components::AudioComponent>()'

如果有人愿意,我可以发布我的方法的源template<class T> bool addComponent(T* component);代码template<class T> T* getComponent();

4

1 回答 1

0

现在已经回答了这个问题 - 请参阅最后一条评论:

@Mutmansky,我不知道在 C++ 中实现的模板化函数需要在头文件中,以及模板化函数的定义。在我这样做之后,按照 Scott Langham 的建议,编译器错误消失了。如果您想查看该文件的源代码,我很乐意在此处发布/发送消息给您。让我知道!

于 2012-05-10T17:37:37.117 回答