現在、Visual Studio Community 2017を使用しています。プロジェクトプロパティのC++言語標準を見ると、C++ 14とC++ 17のみが提供されています。私のコードはC++ 11のコンパイラを使用して以前の割り当てで完成したため、stoiなどの関数を使用してコードを実行することはできません。私の質問は、C++ 11をC++の言語標準に追加する方法があるかどうかです。
GUIのDLLを作成しています。初期化は次のとおりです。
#include <string>
#include "stdafx.h"
using namespace std;
ここでは、分数クラスを作成していますが、主なエラーは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;
}
次のエラーが表示されます。
C2679: binary '>>': no operator found which takes a right-hand operator of type 'std::string"
C3861: 'stoi' identifier not found
この方法はEclipseで完璧に機能しましたが、私が何を間違っているのかはわかりません。
Visual C++ 2017コンパイラは、いくつかの特定の例外を除き、C++ 11/C++ 14に準拠しています。
コンパイラーは特定のC++ 11モードを提供せず、デフォルトはC++ 14ですが、その標準にはC++ 11が完全に含まれています。 C++ 17のサポートは進行中であり、 / std:c ++ 17 または/std::c++latest
スイッチを使用する必要があります。
std::stoi
には適切なヘッダー、具体的には<string>>
を含める必要があります。そのヘッダーを含めるのを忘れたか、またはnamespace
解像度を明示的に処理しませんでした(明示的にstd::
またはusing namespace std;
経由)
VS 2017(15.3更新)時点でのC++ 11/C++ 14/C++ 17標準準拠の最新の状況については、 VS 2017 15.3のC++ 17機能とSTL修正 を参照してください
UPDATED:これでコードを投稿したので、問題にはnothingと関係があることがわかりますどの標準がサポートされています。あなたの問題は、プリコンパイル済みヘッダーがどのように機能するかの秘密を知らないことです。
変化する:
#include <string>
#include "stdafx.h"
に:
#include "stdafx.h"
#include <string>
-または-#include <string>
をプリコンパイル済みヘッダーstdafx.h
に直接追加します。
プリコンパイル済みヘッダーファイルの作成 を参照してください
これに対する更新として、VS 2017、Update 9.4(2018年12月リリース)はC++ 17に完全に準拠しています。