2017-10-06 9 views
2

J'ai récemment mis à jour gcc et g ++ vers la version 7.2. Je voudrais essayer std::experimental::any et std::variant en particulier, et j'utilise Qt 5.9.1 dans QtCreator.Impossible d'utiliser les fonctions C++ 17 à l'aide de g ++ 7.2 dans QtCreator

Jusqu'à présent, je l'ai écrit dans le fichier de projet:

CONFIG += c++17 

et moi avons ajouté les en-têtes corrects dans les bons endroits:

#include <variant> 
#include <experimental/any> 

Tout fonctionne très bien, aucun problème. Cependant, quand je le fichier d'en-tête variante, je reçois cette erreur:

/usr/include/c++/7/bits/c++17_warning.h:32: error: #error This file requires compiler and library support for the ISO C++ 2017 standard. This support must be enabled with the -std=c++17 or -std=gnu++17 compiler options. 

#error Ce fichier nécessite le support compilateur et la bibliothèque \ ^ ~~~~

J'ai essayé une variété de choses le fichier de projet, voici la liste complète:

CONFIG += c++17 

&

CONFIG += c++1z 

&

QMAKE_CXXFLAGS += -std=c++17 

&

QMAKE_CXXFLAGS += -std=c++1z 

&

CONFIG += c++17 
QMAKE_CXXFLAGS += -std=c++17 

&

CONFIG += c++1z 
QMAKE_CXXFLAGS += -std=c++1z 

&

CONFIG += c++11 
CONFIG += c++14 
CONFIG += c++17 

C'est chaque coup de poignard dans l'obscurité que je pouvais penser. Qu'est-ce que je rate? Et pourquoi experimental::any compile quand la variante ne le fait pas?

Je sais que je ne devrais pas utiliser CONFIG += c++xx et QMAKE_CXXFLAGS ensemble de cette façon, mais j'ai pensé que je pourrais l'essayer car rien d'autre ne fonctionne. Pour les points bonus, je me demande aussi, devrais-je ajouter les appels CONFIG pour 14 et 11 quand je CONFIG pour 17?

EDIT:

est ici la sortie du compilateur avec la plupart de mes noms de fichiers frottée sur:

18:04:10: Running steps for project AIQt... 
18:04:10: Configuration unchanged, skipping qmake step. 
18:04:10: Starting: "/usr/bin/make" 
/home/pete/Qt/5.9.1/gcc_64/bin/qmake -o Makefile ../AIQt/AIQt.pro -spec linux-g++ CONFIG+=debug CONFIG+=qml_debug 
WARNING: Failure to find: ../src/stdafx.h 
WARNING: Failure to find: ../src/Csound/csd.h 
g++ -c -pipe -g -Wall -W -D_REENTRANT -fPIC -DQT_DEPRECATED_WARNINGS -DQT_QML_DEBUG -DQT_DATAVISUALIZATION_LIB -DQT_WIDGETS_LIB -DQT_GUI_LIB -DQT_CORE_LIB -I../AIQt -I. -I../src -I../src/AIBase -I../src/Maths -I../src/Random -isystem /usr/local/include/csound -I../../../../Qt/5.9.1/gcc_64/include -I../../../../Qt/5.9.1/gcc_64/include/QtDataVisualization -I../../../../Qt/5.9.1/gcc_64/include/QtWidgets -I../../../../Qt/5.9.1/gcc_64/include/QtGui -I../../../../Qt/5.9.1/gcc_64/include/QtCore -I. -isystem /usr/include/libdrm -I. -I../../../../Qt/5.9.1/gcc_64/mkspecs/linux-g++ -o main.o ../AIQt/main.cpp 
In file included from /usr/include/c++/7/variant:35:0, 
       from ..###, 
       from ..###, 
       from ..###, 
       from ..###, 
       from ..###, 
       from ..###, 
       from ..###, 
       from ..###: 
/usr/include/c++/7/bits/c++17_warning.h:32:2: error: #error This file requires compiler and library support for the ISO C++ 2017 standard. This support must be enabled with the -std=c++17 or -std=gnu++17 compiler options. 
#error This file requires compiler and library support \ 
    ^~~~~ 
In file included from ..###, 
       from ..### 
       from ..###, 
       from ..###, 
       from ..###, 
       from ..###, 
       from ..###: 
../src/AIBase/Geno.h:70:18: error: ‘variant’ in namespace ‘std’ does not name a type 
      std::variant m_valueVariant; 
        ^~~~~~~ 
In file included from ..###, 
       from ..###, 
       from ..###, 
       from ..###, 
       from ..###, 
       from ..###: 
../src/AIBase/Pheno.h:22:13: warning: type qualifiers ignored on function return type [-Wignored-qualifiers] 
      const double getGenoValue(size_t genoIndex) const; 
      ^~~~~ 
../src/AIBase/Pheno.h:24:13: warning: type qualifiers ignored on function return type [-Wignored-qualifiers] 
      const UserRating getRating() const; 
      ^~~~~ 
In file included from ..###, 
       from ..###: 
../AIRadioQt/GraphDialog.h:16:15: warning: declaration ‘struct ar::ai::ClusterList’ does not declare anything 
class ar::ai::ClusterList; 
       ^~~~~~~~~~~ 
make: *** [main.o] Error 1 
18:04:13: The process "/usr/bin/make" exited with code 2. 
Error while building/deploying project AIQt (kit: Qt 5.9.1 GCC 64bit) 
The kit Qt 5.9.1 GCC 64bit has configuration issues which might be the root cause for this problem. 
When executing step "Make" 
18:04:13: Elapsed time: 00:03. 

RÉPONSE:

Comme mentionné par PMN, je devais juste le nettoyer et reconstruire.

Une autre affiche a également commenté que CONFIG += c++17 ne semble pas encore pris en charge, il est donc nécessaire d'utiliser QMAKE_CXXFLAGS += -std=c++17. Il a rapidement supprimé son commentaire, je ne suis donc pas en mesure de le remercier personnellement d'avoir fait l'effort de vérifier les documents pour moi.

+1

Dans le bas, il devrait y avoir un onglet "Sortie de compilation". Quels drapeaux commençant par "-std =" sont là? Notez qu'il peut y en avoir plusieurs et seul le dernier compte. – nwp

+0

C'est un bon point, je n'ai pas pensé à vérifier. Il ne mentionne aucun -std = drapeaux. Ai-je besoin d'ajouter la ligne CONFIG dans un endroit spécifique? La sortie du compilateur est ajoutée à la question ... –

+1

Cliquez avec le bouton droit de votre souris sur votre projet et sélectionnez "clean" puis "Run qmake". Pour des raisons que je ne comprendrai jamais changer le fichier .pro ne met pas toujours à jour le makefile correctement. – nwp

Répondre