我正在尝试构建一个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]
答案 0 :(得分:0)
使用 MSVC 编译器在QT中创建时,确实需要定义 MSVC 特定的环境变量。因此,除非您自己手动定义这些环境变量,否则必须运行vcvarsall.bat
。
VCVarsall.bat是Visual Studio中的Visual Studio命令提示符工具。它是一个工具,允许您为集成开发环境(IDE)设置各种选项,以及从命令行构建,调试和部署项目。