gpt4 book ai didi

c++ - 错误 C2327 : not a type name, 静态或枚举器 - 仅限 MSVC14

转载 作者:行者123 更新时间:2023-11-30 03:42:12 24 4
gpt4 key购买 nike

我有一段代码可以在 GCC 5.3、MSVC12 和 clang 3.7 中正常编译。但是,它不在 MSVC14 中。它以某种方式尝试使用成员而不是 namespace ,我真的不知道这里发生了什么。

#include <QtCore/qglobal.h>

namespace data
{
class Bar {};
}

struct Parent
{
int data;
};

namespace other
{
struct Foo : public Parent
{
void foo(data::Bar);
};
}

void other::Foo::foo(data::Bar) { }

int main()
{
return 0;
}

结果

    cl -c -nologo -Zc:wchar_t -FS -Zc:strictStrings -Zc:throwingNew -Zi -MDd -GR -W3 -w34100 -w34189 -w44996 -w44456 -w44457 -w44458 -wd4577 -EHsc /Fddebug\bug.pdb -DUNICODE -DWIN32 -DWIN64 -DQT_QML_DEBUG -DQT_CORE_LIB -I..\bug -I. -IE:\Qt\Qt5.6.0\5.6\msvc2015_64\include -IE:\Qt\Qt5.6.0\5.6\msvc2015_64\include\QtCore -Idebug -IE:\Qt\Qt5.6.0\5.6\msvc2015_64\mkspecs\win32-msvc2015
main.cpp
..\bug\main.cpp(21): error C2327: 'Parent::data': is not a type name, static, or enumerator

请注意,这是一个 Qt 项目,如果我删除 include,它会编译正常。基本上,如果我更改此代码中的任何内容,它就可以编译。例如,这有效:

namespace other
{
void Foo::foo(data::Bar) { }
}

如果我重命名成员变量数据或命名空间数据,它也可以工作。但是我无法在现实中进行这些更改,声明是由 qmake 生成的代码并且重命名命名空间不是一个选项。

这可能是编译器错误吗?有什么想法吗?

最佳答案

在线21 :

void other::Foo::foo(data::Bar) { }

data是一个不明确的标识符,因为它可以是:

  • 数据命名空间。
  • 类的数据成员变量Parent .
  • xutility 中定义的数据函数之一包括近线1484 (在标准安装中,它位于 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\xutility 中)。 xutility间接包含在 #include <QtCore/qglobal.h> 中.

似乎删除其中任何一个都能使编译器解决歧义。你肯定没有其他编译器的问题,因为你在 xutility 中没有数据函数。 header 甚至 xutility他们的文件不存在。

为了解决歧义,将第 21 行替换为:

void other::Foo::foo(::data::Bar) { }

如果以后还有其他地方必须解决歧义,请根据上下文使用其中之一:

  • ::data
  • Parent::data
  • this->data

关于c++ - 错误 C2327 : not a type name, 静态或枚举器 - 仅限 MSVC14,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36938123/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com