错误:C2057:预期的常量表达式

时间:2018-03-25 15:19:18

标签: c++ windows visual-c++ compiler-errors qt-creator

我正在尝试构建一个oring on mingw的项目,但现在我们需要切换到MSVC ++(因为特定的调试库只支持它)但令我惊讶的是,即使在新的C ++版本/ Qt上编译该代码导致错误:

  

错误:C2057:预期的常量表达式

错误不是我自己的源代码的一部分而是Qt本身,来自qmetatype.h标题,所以我不知道如何修复。我以为它缺少C ++ 11标志,所以我添加了CONFIG += c++11没有改变。然后我尝试更具体,并将QMAKE_CXXFLAGS += /std:c++14添加到.pro文件。同样的错误。错误行是:

struct CapabilitiesImpl<T, std::random_access_iterator_tag>
{ enum { IteratorCapabilities = RandomAccessCapability | BiDirectionalCapability | ForwardCapability }; };

注意:由于我发现cl not found错误,我确实从 qt.bat 文件中为Qt创建者加注星标:

call "C:\Program Files (x86)\Microsoft Visual
Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" x86
"C:\Qt-MSVC\Qt5.7.1\Tools\QtCreator\bin\qtcreator.exe"

我该如何解决?

更新

我尝试使用旧版本来查看它是否有任何不同,但没有,但我得到了更多关于错误的背景信息:

  

C:\ Qt-MSVC \ Qt5.5.0 \ 5.5 \ msvc2013 \ include \ QtCore \ qmetatype.h:944:见   对类模板实例化的引用   'QtMetaTypePrivate :: CapabilitiesImpl,性病:: random_access_iterator_tag&GT;'   被编译   C:\ Qt-MSVC \ Qt5.5.0 \ 5.5 \ msvc2013 \ include \ QtCore \ qmetatype.h:1015:见   对类模板实例化的引用   使用[编译'QtMetaTypePrivate :: ContainerAPI'       T = QVariantList] C:\ Qt-MSVC \ Qt5.5.0 \ 5.5 \ msvc2013 \ include \ QtCore \ qvariant.h:711:见   对函数模板实例化的引用   “QtMetaTypePrivate :: QSequentialIterableImpl :: QSequentialIterableImpl(常量   T *)'正在编译[       T = QVariantList]

1 个答案:

答案 0 :(得分:0)

使用 MSVC 编译器在QT中创建时,确实需要定义 MSVC 特定的环境变量。因此,除非您自己手动定义这些环境变量,否则必须运行vcvarsall.bat

  

VCVarsall.bat是Visual Studio中的Visual Studio命令提示符工具。它是一个工具,允许您为集成开发环境(IDE)设置各种选项,以及从命令行构建,调试和部署项目。

     

Source