問題の説明はとても簡単です...テンプレートクラス(私が好む)とアプリケーションのために必要な列挙型がありますコンソールからの読み取り:演算子>> for enum for templateクラス
これは、Microsoft C/C++最適化コンパイラが動作しなくなるVisual Studioで問題を引き起こします。言い換えれば:「内部エラーがコンパイラで発生した」エラーを再現し
例コード:
#include <iostream>
#include <stdexcept>
template <typename T>
struct S{
enum X { X_A, X_B, X_C };
template <typename U>
friend std::istream& operator>>(std::istream& in, enum S<U>::X& x);
};
template <typename U>
std::istream& operator>>(std::istream& in, enum S<U>::X& x)
{
int a;
in >> a;
x = S::X(a);
return in;
}
int main()
{
S<int> s;
S<int>::X x = S<int>::X_A;
std::cout << "Input: ";
std::cin >> x;
std::cout << "Output: " << x << std::endl;
}
この問題を解決して任意の助けもいただければ幸いです! 私自身はあなたがx = S<U>::X(a)
にx = S::X(a);
を変更する必要が
'enum'は、パラメータリストに必要な、おそらく'型名は S :: X&は 'より良い仕事とされていません。 –
これは重大ではありませんか? – visitor
'typename'はコンパイラをクラッシュから守っていましたが、' std :: cin >> x'を含む行に_no演算子が見つかりましたという不満があります。 – Stonegoat