【问题标题】:Qt Creator's intellisense thinks that min and max were defined even though they weren'tQt Creator 的智能感知认为 min 和 max 已定义,即使它们没有
【发布时间】:2013-02-22 09:06:43
【问题描述】:

在我的代码中

#define NOMINMAX
#include <windows.h>

但每当我使用std::maxstd::min 时,智能感知会在该行用红色下划线,即使编译器不会抱怨它。如果我将代码更改为

#define NOMINMAX
#include <windows.h>

// make sure they min/max weren't defined
#if defined(min) || defined(max)
#error "min or max were defined"
#endif

// but intellisense still thinks they were, 
// so this is needed
#undef min
#undef max

问题消失了。但是定义NOMINMAX 会阻止windows.h 定义最小值/最大值,那么为什么智能感知认为它们已定义,即使它们没有定义?而且我检查过,我添加的预处理器错误从未被命中。

【问题讨论】:

  • 智能感知不理解NOMINMAX
  • 不幸的是,我最近从这台机器上卸载了 QtCreator,但是如果你有这样的项目,QtCreator 是否可以无条件地索引windows.h?如果在编译器设置中定义 -DNOMINMAX 会发生什么?
  • @DavidSchwartz 确实如此,我也检查过。如果我添加一个#ifndef NOMINMAX,它的主体是灰色的,如果我删除#define NOMINMAX,它的主体不再是灰色的。
  • @RomanSaveljev 我将 NOMINMAX 添加到 .pro 文件中,但没有帮助。你可能是对的,我一直这么想,可能标准库路径中的头文件只解析一次。

标签: c++ qt c-preprocessor qt-creator


【解决方案1】:

其实我并没有卸载它。如果我添加DEFINES+=NOMINMAX,它有助于整理索引器

...然后关闭并重新打开项目。尽管 QtCreator 在每次更改 .pro 文件后都告诉“解析”,但我没有立即看到效果。看起来如果你重新打开项目,它会更好地“解析”

我的 QtCreator 版本是 2.6.1,我使用的是 Qt5.0.0

【讨论】:

  • 这应该作为一个错误提交给 Qt 开发人员。
  • 它为我修好了。确实需要重新启动 Qt Creator。至于提交错误,我不知道该怎么做。是不是很费时间?
猜你喜欢
  • 1970-01-01
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
  • 2017-03-16
  • 2010-12-14
  • 2017-04-16
  • 2016-10-26
  • 1970-01-01
相关资源
最近更新 更多