【问题标题】:Visual Studio Intellisense + Resharper throws ambigous symbol error when including the same header twiceVisual Studio Intellisense + Resharper 两次包含相同的标头时会引发模棱两可的符号错误
【发布时间】:2017-08-04 15:58:06
【问题描述】:

我正在将 Resharper C++ 与 Visual Studio 一起使用,但由于明显的命名空间冲突,我收到了一个模棱两可的符号错误。例如,当我想实例化枚举模式时,我在 Sd.cpp 中收到此错误。

枚举类Mode定义在Pins.hpp中,包含在Sd.hpp中。但是,如果我在 Sd.ccp 中包含 Pins.hpp,则会弹出模棱两可的符号错误。编译项目没有问题。

Resharper / Intellisense 是否无法识别 Pins.hpp 是同一个文件? #pragma once 的工作方式是文件路径,所以我不知道会发生什么。

我最近更改了包含目录,所以这可能与问题有关。

任何帮助将不胜感激。


Sd.hpp

#include "Pins.hpp"

Sd.cpp

#include "Pins.hpp"
Mode mode; //error here, Mode is underlined

Pins.hpp

enum class Mode : uint32_t
{
    AlternatePushPull  = GPIO_MODE_AF_PP,
};

EDIT1:添加了代码。 EDIT2:将问题重命名为更有用的东西

【问题讨论】:

  • 显示代码。
  • 您是否在 Pins.hpp 中添加了包含保护?如果代码编译成功,请在youtrack.jetbrains.com/… 中创建问题,ReSharper 团队会尽力提供帮助。
  • 是的,我正在使用#pragma once
  • 而#pragma once 是在 Reshaper 中定义的?我不记得它在标准中。
  • 从 resharper 2016.2 变更日志:如果头文件缺少包含保护,ReSharper C++ 现在会警告您,并将提供修复以自动添加 #pragma once 指令。因此,是的,@Surt。

标签: c++ visual-studio visual-c++


【解决方案1】:

事实证明,ReSharper 在 linting 时会查看整个 VS 解决方案,而不仅仅是项目。因为在我的解决方案中,我有一些项目包含相同的库,但来自不同的位置。因此 ReSharper 无法解析名称。

解决方案很简单:确保所有项目都包含相同的文件。

【讨论】:

  • 我还是不明白为什么 R++ 会显示错误。您能否创建一个重现解决方案,ReSharper 团队会看看?
猜你喜欢
  • 1970-01-01
  • 2012-03-17
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 1970-01-01
  • 2017-11-13
  • 2014-09-28
相关资源
最近更新 更多