gpt4 book ai didi

c++ - "Dependent Name is not a Type",但前缀为 "typename"会导致编译器崩溃

转载 作者:太空狗 更新时间:2023-10-29 21:01:39 24 4
gpt4 key购买 nike

休息后请看更新后的代码;

我有以下模板类:

template<class T> class CDFAManListOps
{
static std::list<T>::iterator CDFAManListOps::GetIterator(std::list<T>* list, int pId)
{
}
}

当我尝试编译它时,它说

std::list<T>::iterator' : dependent name is not a type 1> prefix with 'typename' to indicate a type .

但是如果我像编译器要求的那样改变函数:

static typename std::list<T>::iterator CDFAManListOps::GetIterator(std::list<T>* list, int pId)

编译器 (VS12) 崩溃并出现以下错误:

fatal error C1001: An internal error has occurred in the compiler.

1> (compiler file 'msc1.cpp', line 1443)

1> To work around this problem, try simplifying or changing the program near the locations listed above.

知道这段代码有什么问题吗?


更新:这是我能得到的重现此崩溃的最少代码的全部。

#include <list>

template<class T> class CDFAManListOps
{
static typename std::list<T>::iterator CDFAManListOps::GetIterator(std::list<T>* list, int pId)
{
}

static typename std::list<T>::iterator CDFAManListOps::GetIterator(std::list<T>* list, T object)
{

}
};

int main()
{

}

如果我取出两个 GetIterator 中的 EITHER功能,程序编译并运行良好。只有当两个函数都存在时,编译器才会崩溃。这是否让我的代码中的问题更加清晰?

(此外,如果有人想了解其状态,我将向 Microsoft Connect 提交错误报告并在此处发布链接。)

我已在 Microsoft Connect 上提交错误报告 here .

更新:Microsoft 已决定在可预见的 future 对这个特定错误采取任何措施。请参阅上面的 Microsoft Connect 链接。

最佳答案

我无法使用 MSVS2012 中的给定代码重现您的问题。这编译得很好:

#include <list>
template<class T>
class CDFAManListOps
{
public:
static typename std::list<T>::iterator GetIterator(std::list<T>* list, size_t pId)
{
typename std::list<T>::iterator it = list->begin();
for (size_t i=0; i<pId; ++i) ++it;
return it;
}
};

int main(void)
{
std::list<size_t> x(5);
CDFAManListOps<size_t>::GetIterator(&x, 2);
return 0;
}

好的,我现在可以重现问题了。从类内定义中删除 CDFAManListOps:: 将导致正确编译代码。

#include <list>
template<class T> class CDFAManListOps
{
static typename std::list<T>::iterator GetIterator(std::list<T>* list, int pId) {}
static typename std::list<T>::iterator GetIterator(std::list<T>* list, T object) {}
};
int main() {}

关于c++ - "Dependent Name is not a Type",但前缀为 "typename"会导致编译器崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17684603/

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