我真的很担心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 *等...不同类型我希望这在某种程度上是有用的,再次感谢你的努力!
答案 0 :(得分:0)
我认为由于cpp编译器自动转换,一些问题正在出现。
尝试使用模板(左侧支架)类mytype(右侧支架)
答案 1 :(得分:-1)
尝试将模板T定义为类:
template <class T>
如果没有一些可靠的错误信息,除了这一点之外我无法提供帮助,一眼就能看出我或多或少。