2011-08-31 47 views
2

我有以下情况。Visual C++ intellisense比编译器“更聪明”

我有从中类派生的基类。然而,每当我将鼠标光标悬停在基类的继承成员上时,每一次都显得很好,智能感知系统显示它很好,EG BaseClass :: SomeMember。但是,当我尝试编译时,编译器会显示各种错误(它们是关于intellisense报告的变量和成员函数)。编译器说'它们不是有效的标识符',它们不属于全局命名空间。有谁知道这是为什么发生?

+0

据我所知,他们是两个独立的过程,所以它可能在某些情况下,智能感知会加倍努力来帮助你,而编译器是严格 –

+0

你能提供一个代码示例? –

+1

最近有人讨论过这个问题,所以请仔细研究一下 - 前端是由EDG授权的,它提供Intellisensing,但是编译器是微软自己的,而且两者在非常现代的C++特性方面完全不同。 –

回答

8

如果这是VC2010,那么是的,从某种意义上说是智能感知更聪明。 他们转而使用EDG的IntelliSense编译器前端,这是比微软自己的编译器更严格,更符合标准的编译器。所以有些情况下IntelliSense和“真实”的编译器不一致。

有时智能感知是错误的,因为它没有完整的图片(它运行在不同的上下文中,并且一次只处理代码的小片段),有时智能感知是正确的,编译器是错误的(在符合C++标准的条款),因为EDG的前端在这方面只是更好。

2

不,智能感知绝对不是聪明。您的代码已损坏。向代码的相关部分询问单独的问题以及获得的错误消息。

1

这取决于你的“聪明”的定义。 Intellisense并不是一个完整的编译器,但它会内置各种启发式技术,以帮助处理无效的代码。如果它没有这些,那么它就完全没用了。

但这些试探最终只是猜测;有时他们会误导或错误的。

+0

相当不幸。 d: – Rhexis