I am currently using Visual Studio Community 2017. From looking at the C++ Language Standards in the project properties, they only provide C++14 and C++17. Since my code was completed for a previous assignment using a compiler for C++11, I am unable to run my code using functions such as stoi. My question is if there is a way to add C++11 to the language standards for C++?
I am creating a DLL for a GUI, my initializations are:
#include <string>
#include "stdafx.h"
using namespace std;
Here I am creating a fraction class, the main errors follow in the 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;
}
I am getting the following errors:
C2679: binary '>>': no operator found which takes a right-hand operator of type 'std::string"
C3861: 'stoi' identifier not found
This method worked perfectly fine in eclipse, not sure what I am doing wrong.
In versions of Visual Studio 2019 before version 16.11, /std:c++latest is required to enable all the compiler and standard library features of C++20. For a list of supported language and library features, see What's New for C++ in Visual Studio.
Visual Studio 2017: mainstream support ends April 12, 2022, and the product will transition to extended support until April 2027. During extended support we'll provide fixes only for security issues. We recommend users move to the 15.9 supported baseline to remain under support.
Visual Studio 2017 version 15.3/std:c++17 enables the set of C++17 features implemented by the compiler.
The Visual C++ 2017 compiler is C++11/C++14 compliant with a few specific exceptions:
The compiler does not offer a specific C++11 mode and defaults to C++14, but that standard is fully inclusive of C++11. C++17 support is in progress, and requires you use the /std:c++17 or /std::c++latest
switch.
std::stoi
requires you include the appropriate header, specifically <string>>
Either you forgot to include that header -or- you didn't deal with the namespace
resolution (either explicitly as std::
or via using namespace std;
)
See C++17 Features And STL Fixes In VS 2017 15.3 for the latest status of C++11/C++14/C++17 standards conformance as of the VS 2017 (15.3 update)
UPDATED: For the latest on Visual C++ conformance, see Microsoft Docs.
Now that you have posted your code, I see that the problem has nothing to do with which standard is supported. Your problem is that you don't know the secrets of how Precompiled Headers work.
Change:
#include <string>
#include "stdafx.h"
to:
#include "stdafx.h"
#include <string>
-or- add #include <string>
to the precompiled header stdafx.h
directly.
See Creating Precompiled Header Files
Microsoft I think has declared that
Note that there is no plan to add a C++11 switch. link
So there's not an explicit switch
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With