Est le C++11 disponibles dans Visual Studio 2017?
Je suis actuellement à l'aide de Visual Studio Community 2017. En regardant le Langage C++ Normes dans les propriétés du projet, elles ne fournissent que C++14 et C++17. Depuis mon code a été réalisé pour un travail précédent à l'aide d'un compilateur de C++11, je ne parviens pas à exécuter mon code à l'aide de fonctions telles que stoi. Ma question est de savoir si il existe un moyen d'ajouter de C++11 de la langue des normes pour le C++?
Je suis entrain de créer une DLL pour une interface graphique, mes initialisations sont:
#include <string>
#include "stdafx.h"
using namespace std;
Ici, je suis de la création d'une fraction de la classe, les principales erreurs à suivre dans le ifstream:
istream& operator>>(istream& in, Fraction& f) {
string number;
in >> number; //read the number
size_t delimiter = number.find("/"); //find the delimiter in the string "/"
if (delimiter != string::npos) { //if delimiter is not empty
int n = stoi(number.substr(0, delimiter)); //set numerator from string to integer before the "/"
int d = stoi(number.substr(delimiter + 1)); //set denominator from string to integer after the "/"
if (d == 0) { //if denominator is 0
throw FractionException("Illegal denominator, cannot divide by zero."); //illegal argument throw
}
else if (n == 0 && d != 0) { //numerator is 0, then set values as zero fraction
f.numVal = 0;
f.denVal = 1;
}
else { //set the values into the fraction and normalize and reduce fraction to minimum
f.numVal = n;
f.denVal = d;
f.normalizeAndReduce(f.numVal, f.denVal);
}
}
else { //else if there is no delimiter it would be a single integer
f.numVal = stoi(number);
f.denVal = 1;
}
return in;
}
J'obtiens les erreurs suivantes:
C2679: binary '>>': no operator found which takes a right-hand operator of type 'std::string"
C3861: 'stoi' identifier not found
Cette méthode a fonctionné parfaitement bien dans eclipse, pas sûr de ce que je fais de mal.
VS2017 est presque entièrement compatible avec le C++11, y compris stoi (docs.microsoft.com/en-us/cpp/standard-library/...) peut-être que si vous vous montrez le code de problème, nous pourrions aider.
J'ai ajouté le code de problème, merci pour l'aide!
Vous avez oublié de
#include
les deux <string>
et <iostream>
, n'est-ce pas?le iostream est dans mon fichier d'en-tête et il est inclus dans le "stdafx.h"
OriginalL'auteur user3344484 | 2017-10-31
Vous devez vous connecter pour publier un commentaire.
Visual C++ 2017 est un compilateur C++11 Et C++14 conforme avec quelques exceptions:
Le compilateur n'a pas d'offre spécifique en C++11 et en mode par défaut, C++14, mais le standard est pleinement inclusive de C++11. C++17 de soutien est en cours, et nécessite l'utilisation de la /std:c++17 ou
/std::c++latest
commutateur.std::stoi
exige de vous d'inclure l'en-tête approprié, spécialement<string>>
Soit vous avez oublié d'inclure l'en-tête ou vous n'avez pas à traiter avec lanamespace
résolution (soit explicitement, commestd::
ou viausing namespace std;
)Mise à JOUR: Maintenant que vous avez posté votre code, je vois que le problème a rien à voir avec la norme est pris en charge. Votre problème est que vous ne connaissez pas les secrets de la façon d'en-Têtes Précompilés travail.
Changement:
:
-ou - ajouter
#include <string>
à l'en-tête précompiléstdafx.h
directement.Voir La Création De Fichiers D'En-Tête Précompilé
/std:c++14
indicateur doit être utilisé. Voir Normes de la version commutateurs dans le compilateur.S'il vous plaît re-lire votre lien de manière plus approfondie, ils ont spécifiquement dire que le C++14 correspond à la langue de niveau lorsque les commutateurs ont été introduits, et il n'y aura pas de C__11 mode.
L'équipe Visual C++ n'a pas senti qu'il y avait beaucoup de valeur à avoir une distincte de C++14 vs C++11 mode. C++14, c'est vraiment juste quelques corrections de bug pour le C++11 plus quelques améliorations à faire usage de C++11 constructions plus général. En plus de permettre à de nouveaux C++17 constructions, l'
/std::c++17
commutateur a également pour effet de supprimer certaines de la Bibliothèque Standard de choses qui ont été déprécié en C++14 c'est donc potentiellement un plus grand impact sur le code. Aussi, un peu de C++14, les choses étaient déjà en VS 2013, donc il n'était pas tout à fait comme clairement séparées à partir de C++11.vous devriez poster une question spécifiquement au sujet de votre
stoi()
problème. y compris un minimum, exemple complet qui provoque le problème et inclure le compilateur de ligne de commande à utiliser pour construire le programme (et produit le message d'erreur). Notez que même lors de l'utilisation de l'IDE de construire, vous pouvez trouver la ligne de commande utilisée pour compiler dans le "CL.commande.1.tlog de fichier" dans la construction du répertoire de sortie.Yup. Lorsque les en-têtes précompilés sont utilisés, rien de avant de la PCH en-têtes est inclus est ignoré dans tout le fichier source sauf qui est utilisée pour générer de la PCH (qui est
stdafx.cpp
par défaut dans le VS modèles). C'était comme votre#include <string>
n'était pas là... un Autre correctif ici aurait été de désactiver l'utilisation de la PCH pour l'ensemble du projet ou même simplement votre fichier source.OriginalL'auteur Chuck Walbourn
Une mise à jour de cette, VS 2017, la mise à Jour 9.4 (releasd Décembre 2018) est maintenant entièrement en C++17 conformes.
OriginalL'auteur Mike Diack
C++ est une évolution du standard - après 2003, il y avait de 2011 (C++11), puis en 2014 (C++14) et maintenant nous avons 2017 (C++17) et nous nous dirigeons vers 2020 (C++20). Ils sont à la hausse compatible.
Look ici pour Microsoft Visual C++ support pour les différentes normes.
OriginalL'auteur davidbak