gpt4 book ai didi

c++ - 奇怪的 VC++ 编译错误,C2244

转载 作者:搜寻专家 更新时间:2023-10-31 02:00:50 25 4
gpt4 key购买 nike

看看这段代码:

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;

在类(class)里面。 BinaryTree间接继承自Collection,BinaryTreeIterator间接继承自Iterator,都是各自容器的嵌套类。

您可以很容易地看到,即使在错误报告中,定义和声明也是相同的。这里真的有问题吗?

我发现微软发布了一个 hotfix :“某些模板代码无法编译,并且在安装 Visual Studio 2005 Service Pack 1 后出现错误 C2244”。但是我找不到任何对 VSTS 2008 的引用。

所以首先我想检查是否有人一眼就能发现代码中的真正错误,如果是 VS 的错,有没有人知道上述修补程序是否是解决方案并且是否也与 2008 相关。

最佳答案

对于那些感兴趣的人,我尝试编写一个最小的示例来重现该问题:

template <typename T>
struct Pointer {};

template <typename T>
struct Collection {
struct Iterator {};
};

template <typename K,typename T>
struct BinaryTree : Collection<T>{
Pointer<typename Collection<T>::Iterator> GetBeginning() const;

struct BinaryTreeIterator : Collection<T>::Iterator {
template <typename X>
BinaryTreeIterator(BinaryTreeIterator*, X) {}
struct Position {
static int atBeginning() { return 0; }
};
};
};

template <typename K,typename T>
Pointer<typename Collection<T>::Iterator> BinaryTree<K,T>::GetBeginning() const
{
return Pointer<typename Collection<T>::Iterator>();
}

int main(){
BinaryTree<int, float> bt;
bt.GetBeginning();
}

是的,我也遇到了错误。我看不出您的代码有任何明显的错误,但是话又说回来,仅此示例使用的嵌套类和继承比大多数理智的 C++ 程序员一年内使用的还要多,所以我不能肯定地说您的代码是否正确。

此外,我不得不猜测很多才能将其拼凑起来。 (atBeginning 应该是什么?实际的类接口(interface)是什么?)

但我怀疑如果您不从其他所有内容继承所有内容,它会工作得更好(并且更具可读性和更容易调试)。

更新我尝试用 GCC 和 Comeau 的在线编译器编译上面的代码,并且都接受了。所以看起来它可能是一个编译器错误。

关于c++ - 奇怪的 VC++ 编译错误,C2244,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1484885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com