VC2005报告的template编译错误.....faint!

昨天做基于策略的资源管理的时候碰到一个恶心的问题----编译错误. 这年头,编译错误能难倒人的还真不多见.不过越来越仗着编译器的功能强大,而不注意留心写代码时候的细心(尤其是改代码的时候)终究让我遭到了报应.
当时的代码如下:

 template <typename ResType> class TSimpleResCreator
{
public:
ResType* newInstance()
{
return ResType::newInstance();//ResType;
}

void deleteInstance(ResType* pRes)
{
ResType::deleteInstance(pRes);
}
};

template <typename ResType , typename _TCreator = TSimpleResCreator<ResType> >
class TBaseResMgr : public _TCreator , public IResManager
{

}; //出错的提示行

这样的代码虽然我的模板水平不是很高。但是还不至于写错的。但是我代码是在以前的基础上改的。改完了以后怎么编译都通不过。编译器提示TBaseResMgr的模板参数太多。。。。错误行是发生上面代码注明的那个地方。同样的代码拷贝到另外一个工程里却是好的。 让我郁闷坏了。 很少见过那一行出错的。。。
后来仔细检查了一下。最终发现这个类前面还定义了几个其他类。而其他类前面有TBaseResMgr的forward declaration....我给TBaseResMgr类加了策略。做了改动。却没改 forward declaration 。。。。
原来的forward declaration是这样的:
template <typename ResType > class TBaseResMgr
后来改成这样就OK了。
template <typename ResType , typename _TCreator = TSimpleResCreator<ResType> >
class TBaseResMgr


很是不了解,为什么VC2005要把错误行号报告在那一行。哪怕是把错误行号指向类的定义那一行也好。很是不解。不过错还是在自己。所以下面:
反思:
 改代码一定要细心。copy paste代码是万恶之源更要千万小心

你可能感兴趣的:(template)