Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何启用C++;14岁以上的Qt?Qmake与C+不兼容+;14_Qt_C++14_Qt Creator_Qmake_Qt5.2 - Fatal编程技术网

如何启用C++;14岁以上的Qt?Qmake与C+不兼容+;14

如何启用C++;14岁以上的Qt?Qmake与C+不兼容+;14,qt,c++14,qt-creator,qmake,qt5.2,Qt,C++14,Qt Creator,Qmake,Qt5.2,我有Qt5.2.1(用GCC4.8.2编译)和GCC4.9.4(mingw-w64)编译器 C++11运行良好。始终具有,即使使用4.8.2编译器也是如此 我需要一些C++14功能。我想使用最新的编译器,但对ABI更改的关注使我得到了4.9.2。GCC4.9.2应该支持make_unique和C++14 我的问题是,我似乎无法在QtCreator中获得C++14支持 尝试添加到pro文件…无效 CONFIG += c++14 已尝试添加到pro文件…不起作用: QMAKE_CXXFLAGS_

我有Qt5.2.1(用GCC4.8.2编译)和GCC4.9.4(mingw-w64)编译器

C++11运行良好。始终具有,即使使用4.8.2编译器也是如此

我需要一些C++14功能。我想使用最新的编译器,但对ABI更改的关注使我得到了4.9.2。GCC4.9.2应该支持make_unique和C++14

我的问题是,我似乎无法在QtCreator中获得C++14支持

尝试添加到pro文件…无效

CONFIG += c++14 
已尝试添加到pro文件…不起作用:

QMAKE_CXXFLAGS_CXX14 = -std=c++14
QMAKE_CXXFLAGS_CXX14 = -std=c++14
QMAKE_CXXFLAGS_GNUCXX14 = -std=c++14
win32-g++ {
   QMAKE_CXXFLAGS_CXX14 = -std=c++14
   QMAKE_CXXFLAGS_GNUCXX14 = -std=c++14
}
已尝试添加到pro文件…不起作用:

QMAKE_CXXFLAGS_CXX14 = -std=c++14
QMAKE_CXXFLAGS_CXX14 = -std=c++14
QMAKE_CXXFLAGS_GNUCXX14 = -std=c++14
win32-g++ {
   QMAKE_CXXFLAGS_CXX14 = -std=c++14
   QMAKE_CXXFLAGS_GNUCXX14 = -std=c++14
}
已尝试添加到pro文件…不起作用:

QMAKE_CXXFLAGS_CXX14 = -std=c++14
QMAKE_CXXFLAGS_CXX14 = -std=c++14
QMAKE_CXXFLAGS_GNUCXX14 = -std=c++14
win32-g++ {
   QMAKE_CXXFLAGS_CXX14 = -std=c++14
   QMAKE_CXXFLAGS_GNUCXX14 = -std=c++14
}
已尝试将win32-g++makespec文件添加/编辑到此文件。。。不起作用

QMAKE_CXXFLAGS_CXX11 = -std=c++0x
QMAKE_CXXFLAGS_CXX14 = -std=c++14
QMAKE_CXXFLAGS_GNUCXX14 = -std=c++14
QMAKE_CXXFLAGS_CXX14 = -std=c++14
QMAKE_CXXFLAGS_GNUCXX14 = -std=c++14
QMAKE_CXXFLAGS_CXX11 = -std=c++14
QMAKE_CXXFLAGS_CXX14 = -std=c++14
QMAKE_CXXFLAGS_GNUCXX14 = -std=c++14
QMAKE_CXXFLAGS_CXX11 = -std=c++14
已尝试将win32-g++makespec文件添加/编辑到此文件。。。不起作用

QMAKE_CXXFLAGS_CXX11 = -std=c++0x
QMAKE_CXXFLAGS_CXX14 = -std=c++14
QMAKE_CXXFLAGS_GNUCXX14 = -std=c++14
QMAKE_CXXFLAGS_CXX14 = -std=c++14
QMAKE_CXXFLAGS_GNUCXX14 = -std=c++14
QMAKE_CXXFLAGS_CXX11 = -std=c++14
QMAKE_CXXFLAGS_CXX14 = -std=c++14
QMAKE_CXXFLAGS_GNUCXX14 = -std=c++14
QMAKE_CXXFLAGS_CXX11 = -std=c++14
已尝试将win32-g++makespec文件添加/编辑到此文件。。。不起作用

QMAKE_CXXFLAGS_CXX11 = -std=c++0x
QMAKE_CXXFLAGS_CXX14 = -std=c++14
QMAKE_CXXFLAGS_GNUCXX14 = -std=c++14
QMAKE_CXXFLAGS_CXX14 = -std=c++14
QMAKE_CXXFLAGS_GNUCXX14 = -std=c++14
QMAKE_CXXFLAGS_CXX11 = -std=c++14
QMAKE_CXXFLAGS_CXX14 = -std=c++14
QMAKE_CXXFLAGS_GNUCXX14 = -std=c++14
QMAKE_CXXFLAGS_CXX11 = -std=c++14
已尝试将win32-g++makespec文件添加/编辑到此文件。。。不起作用

QMAKE_CXXFLAGS_CXX11 = -std=c++0x
QMAKE_CXXFLAGS_CXX14 = -std=c++14
QMAKE_CXXFLAGS_GNUCXX14 = -std=c++14
QMAKE_CXXFLAGS_CXX14 = -std=c++14
QMAKE_CXXFLAGS_GNUCXX14 = -std=c++14
QMAKE_CXXFLAGS_CXX11 = -std=c++14
QMAKE_CXXFLAGS_CXX14 = -std=c++14
QMAKE_CXXFLAGS_GNUCXX14 = -std=c++14
QMAKE_CXXFLAGS_CXX11 = -std=c++14
我认为QMake是问题所在。当然,我不确定

编辑--添加更多输入

专业文件

#-------------------------------------------------
#
# Project created by QtCreator 2018-02-05T13:02:30
#
#-------------------------------------------------

QMAKE_CXXFLAGS += -std=c++1y

QT       += core

QT       -= gui

TARGET = test2
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app


SOURCES += main.cpp
测试代码

#include <QCoreApplication>
#include <iostream>
#include <memory>

using namespace std;

class A{
public:
    A(){cout << "ctorA " << endl;}
    ~A(){cout << "dtorA " << endl;}
};

class X{
    A arr[10];
};

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    { unique_ptr<X> upX = make_unique<X>(); }

    return a.exec();
}
#包括
#包括
#包括
使用名称空间std;
甲级{
公众:

A(){cout如果您使用了错误的变量,那么以下变量应该可以工作,并且是

<> P>根据Qt版本的调度,我们在2014年12月15日发布了C++ 5.2之前的版本,而GCC 4.82.支持C++ 14的一些子集,而不是C++ 14兼容编译器。C++上的GCC支持标准。 很可能您需要将Qt升级到至少5.4才能启用
CONFIG+=c++14
配置,而且编译器需要比GCC 4.8.2更新,最好至少是GCC 5+


< >尝试用<代码> -STD= GNU+1YY代码/CAR>,它的目的是激活早期GCC中的C++ 14特性。

< P>我在我的一个项目中使用这个。在<代码> PRO/<代码>文件:

CONFIG += c++14

# Qt 5.3 and lower doesn't recognize "c++14". Use c++11 and then replace
# the compiler flags with c++14.
contains(QT_MAJOR_VERSION, 5):lessThan(QT_MINOR_VERSION, 4) {
    CONFIG += c++11
    QMAKE_CXXFLAGS_CXX11 = $$replace(QMAKE_CXXFLAGS_CXX11, "std=c\+\+11", "std=c++1y")
    QMAKE_CXXFLAGS_CXX11 = $$replace(QMAKE_CXXFLAGS_CXX11, "std=c\+\+0x", "std=c++1y")
}

# Qt 4 doesn't even know about C++11, so just add c++14 directly.
contains(QT_MAJOR_VERSION, 4) {
    QMAKE_CXXFLAGS += -std=c++1y
}
如果您不关心Qt4,请移除最后一个零件


很明显,这只适用于GCC和Clang。其他编译器需要不同的处理。

请详细说明。我应该把什么放在哪里。我把QMAKE_cxflags+=-std=c++1y放在PRO文件中,但它不起作用。它在make_unique上吠叫……说它不是std的成员。如果去掉QT行并按命令编译,代码就可以工作使用g++。您是否在更改pro文件之后和构建代码之前运行qmake?在QT Creator中,在“构建”菜单中有一个“运行qmake”选项,您必须手动执行此操作,但它不会为您执行此操作。通常情况下,pro文件中的事情顺序并不重要,但我更喜欢在文件的早期保留此类标志。您说什么这就是我将编译器升级到4.9.4的原因,它确实支持我需要的C++14功能(特别是使_独一无二)。我还读到Qt 5.4做了一些事情来启用CONFIG+=c++14配置,但由于许可证限制,我无法使用高于5.3.2的Qt。这就是我问这个问题的原因。问题似乎出在Qmake或makespec或其他方面。尽管编译器支持,但c++14无法轻松启用。*但我无法使用Qt由于许可证限制,高于5.3.2*听起来很奇怪。这是什么类型的许可证?我为拥有商用Qt许可证的组织工作,我们只在需要时获得新版本。这是第二家拥有与我相同的Qt商用许可证的组织。这里不使用商用许可证。LGPL 2.1。允许关闭D源开发,只要你不修改QT并动态链接到它。每年开发者负担不起$6000美元,获得商业许可。5.3.2是LGPL 2.1下的最后QT。我只是更新了我的答案:尝试用<代码> -STD= GNU+1YY < /C> >激活C++早期14个特性。anges.我应该把contains块放进什么文件?这是一些令人印象深刻的信息。你是怎么知道的?:)@代码你把它放在你的项目文件中,在最初的条目之后。下面是它在我的文件中的样子:。至于我是怎么知道的,我不确定。我从2002年左右开始使用Qt的,我想这意味着我知道我的方法:-)Thanks Nikos。我仍在试图解决此问题。结果表明,Qt和QtCreator的工作方式存在深层次问题。Qt Creator GUI意味着您可以创建结合了diff-Qt构建和diff编译器的工具包(显然有一些限制……我只是想用一个更新的GCC4.9.3编译器重新钩住一个用GCC4.8.2构建的QT库……ABI兼容)。但这不是真的。它不能这样做。也许新的QT创建者可以…但我的测试表明Creator 3.0.1要么有缺陷,要么构思不周。QT LIB的打包方式是使用GCC BIN、LIB和标头…这使得…无法与不同版本的编译器重新组合。您可以尝试通过Creator GUI来实现,但它只是忽略了您指向的res编译器,默认为绑定了gcc文件。我甚至尝试手动覆盖绑定的gcc文件,但仍然不起作用。sys path中没有任何内容。这是一个混乱。它不应该这么难。Qt打包方案看起来像是一个混乱,编译器文件分散在树层次结构中。不是很插件-播放。也许他们在新版本中改进了这一点。@代码我建议完全卸载您当前的Creator和Qt,删除所有剩余内容,同时删除appdata中的配置文件,然后下载在线安装程序,这将使您能够轻松更新到新版本。对我来说,听起来您使用的是outd最重要的是,您的配置混乱。您可能应该更新到最新版本。在线安装程序使升级非常容易。