2

我真的在为 C++ 中的一个问题而苦苦挣扎,我真的很沮丧:
问题是当我编码时没有错误,一切看起来都很好(我使用的是 Vs2012)但是当我尝试在那里编译它时有很多错误,取决于我如何改变代码。我真的无法让它工作,我希望你能帮助我,这对专家来说应该很容易!这基本上是我的一些代码,所有包含的内容都是 finde 并且项目设置正确:

    class someclass //that stores the references
    {
    public:

        // ..........

        template <typename T>
        T* getComponent(string name) 
        // headers and cpp files are actually seperated 
        {
            auto itr = _map.find(name);
            if (itr == _map.end())
                return 0;
            return dynamic_cast<T*>(itr->second);
        }

     private:
        unordered_map<string, Baseclass*> _map;
    }

我试图调用它的方式类似于:

   DerivedFromBase* d = someclass->getComponent<DerivedFromBase>("derived");

我不知道我是否误解了模板非常糟糕,或者我离解决方案仅一步之遥,这就是为什么我在这里发布我的问题,我希望专家给我一个提示。我只是想稍微润色一下我的代码,没有模板它看起来像这样(并且它有效):

    class someclass
    {
        Base* getComponent(string) //...
    };

我称之为:

    Derived* d = (Derived*) someclass->getComponent(name);

这确实有效,但我认为模板的概念会更好,但同样,我不知道我是否误解了它。提前感谢您的任何帮助!

谢谢你的提示。我真的忘记了这里的括号,但它们在我的代码中。顺便说一句,对不起我的英语不好,我希望你能理解我的意思;)我是否必须转换为 T 或 T* (实际的返回类型或者演员是否已经给了我一个 T* 以便我在 T* 中的演员实际上会导致T* ? 我在我的 cpp 和我的头文件中都有模板的定义,这可能是错误,因为当我将它留在 c++ 文件中时,它会说“未知类型说明符 T”,但如果我把这在我的 .h 文件之上,我的整个类被认为是一个模板类(这不是我想要的,因为我需要几个派生类(lkie derived1,derived2* 等不同类型)。我希望这是不知何故有用,再次感谢所有的努力!

4

2 回答 2

0

我认为由于 cpp 编译器完成的自动转换,会出现一些问题。

尝试使用模板(左方括号)类 mytype(右方括号)

于 2013-08-06T17:23:35.543 回答
-1

尝试将您的模板 T 定义为一个类:

template <class T>

如果没有一些可靠的错误消息,我真的无能为力,乍一看,它看起来或多或少没问题。

于 2013-08-06T17:31:26.830 回答