看看这个peice的代码:奇怪的VC++编译错误,C2244
template <typename K,typename T>
Pointer<typename Collection<T>::Iterator> BinaryTree<K,T>::GetBeginning() const
{
return new BinaryTreeIterator(this,BinaryTreeIterator::Position::atBeginning);
}
当我尝试使用VSTS 2008年编译它,我得到:
error C2244: 'BinaryTree<K,T>::GetBeginning' : unable to match function definition to an existing declaration
see declaration of 'BinaryTree<K,T>::GetBeginning'
2> definition
2> 'Pointer<Collection<T>::Iterator> BinaryTree<K,T>::GetBeginning(void) const'
2> existing declarations
2> 'Pointer<Collection<T>::Iterator> BinaryTree<K,T>::GetBeginning(void) const'
声明:
Pointer<Iterator> GetBeginning() const;
是在类中。 BinaryTree从Collection间接继承,而BinaryTreeIterator间接从Iterator继承,它们都是各自容器的嵌套类。
即使在错误报告中,您也可以很容易地看到定义和声明是相同的。这里真的有问题吗?
我发现微软发布了hotfix:“某些模板代码无法编译,安装Visual Studio 2005 Service Pack 1后出现错误C2244”。但我找不到任何对VSTS 2008的参考。
所以首先我想检查是否有人能够在代码中发现一个真正的错误一目了然,如果它的VS的错,有没有人知道如果上述修补程序是该解决方案也适用于2008年。
没有真正的问题有关,但你应该让你的心是否你在写C++或Java的。这看起来像某人天真地从Java移植了函数,而对实际语言差异没有考虑。痛苦的... – jalf 2009-09-28 00:41:27
你试过改变声明指针 :: Iterator> GetBeginning()const? (只是一个想法) –
2009-09-28 00:46:50
@Andrew:改变它如何? – sold 2009-09-28 00:55:30