本文介绍了前向声明类型和“非类类型已声明为类类型"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下代码的问题:
template <typename T>
void foo(struct bar & b);
struct bar {};
int main(){}
它在 GCC 上编译成功,但在 MSVC (2008) 上失败并出现以下错误:
It compiles successfuly on GCC, but fails on MSVC (2008) with following error:
C2990: 'bar' : 非类类型已被声明为类类型
是代码错误还是 MSVC 中的错误?
Is the code wrong or it's a bug in MSVC?
如果我在模板定义之前添加 struct bar;
就可以了.
It works if I add struct bar;
before template definition.
推荐答案
我们有了我们的赢家:
感谢您报告此问题.这确实是一个案例VC++ 中的不一致行为.但是,一个简单的解决方法是重新排序声明,以便声明struct bar"在什么时候是已知的模板声明是遭遇.由于低严重性关于这个错误和我们的优先事项,我们很遗憾我们无法修复错误编译器的下一个版本,但是我们将在未来考虑它发布.
问候,
坦维尔加尼Visual C++ 团队
Tanveer Gani Visual C++ Team
这篇关于前向声明类型和“非类类型已声明为类类型"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!