【问题标题】:Intellisense at odds with compiler: "A namespace with this name does not exist" vs "not a class or struct name"Intellisense 与编译器不一致:“具有此名称的命名空间不存在”与“不是类或结构名称”
【发布时间】:2016-12-21 00:58:34
【问题描述】:

我有一个 ATL 项目,其中有一个实现接口的类(使用 VS 中的“实现接口”快捷方式生成)。自动生成的 stdafx.h 包含:

#import "C:\path\to\base.dll" raw_interfaces_only, raw_native_types, no_namespace, named_guids, auto_search

我的班级 (CPLUGIN) 实现了接口 (IBase::IBaseClient):

class ATL_NO_VTABLE CPLUGIN :
    public CComObjectRootEx<CComSingleThreadModel>,
    public CComCoClass<CPLUGIN, &CLSID_PLUGIN>,
    public IDispatchImpl<IPLUGIN, &IID_IPLUGIN, &LIBID_MyLib, /*wMajor =*/ 1, /*wMinor =*/ 0>,
    public IBaseClient {
 ...

按原样,intellisense 抱怨 IBaseClient “不是类或结构名称”,但它编译得很好。

如果我添加 using namespace IBase 或完全限定基类名称 (IBase::IBaseClient),那么智能感知错误就会消失,但编译器会显示“IBase:具有此名称的命名空间不存在”并且无法编译。

如何让 IntelliSense 和编译器都满意?

【问题讨论】:

  • 让智能感知快乐不应该是高优先级。你最好的机会是更新或等待微软的下一个更新来修复它(并希望他们没有破坏其他东西)。
  • 啊,所以这只是我应该注销的智能感知错误?
  • 众所周知,Intellisense 偶尔会将红色波浪线置于完美的代码之下。您可以尝试右键单击您的解决方案并选择“重新扫描解决方案”以强制智能感知在添加波浪线之前更加努力,但如果它们仍然存在,请忽略它们。

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


【解决方案1】:

用户 nwp 是对的:上下文菜单选项“重新扫描解决方案”可以解决问题。需要注意的一件事:此选项属于项目上下文菜单,而不是解决方案上下文菜单。至少对于我的 Windows 10 计算机上的 Visual Studio 2015 来说是这样。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-01
    • 2014-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多