次のコードを見てください。
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 から間接的に継承します。どちらもそれぞれのコンテナーのネストされたクラスです。
エラー レポートでも、定義と宣言の両方が同一であることが簡単にわかります。ここで本当に何か問題がありますか?
Microsoft が修正プログラムをリリースしたことを発見しました:「特定のテンプレート コードがコンパイルされず、Visual Studio 2005 Service Pack 1 をインストールした後にエラー C2244 が発生する」。ただし、VSTS 2008 への参照は見つかりませんでした。
最初に、誰かがコードの実際のエラーを一目で見つけられるかどうかを確認したかったのですが、それがVSのせいである場合、上記の修正プログラムが解決策であり、2008年にも関連しているかどうかを知っている人はいますか.