12

このコードはなぜですか?

constexpr float operator "" _deg(long double d) {
    // returns radians
    return d*3.1415926535/180;
}

static const float ANGLES[] = {-20_deg, -10_deg, 0_deg, 10_deg, 20_deg};

これらのエラーのうち5つを生成します。

エラー:数値リテラル演算子'operator ""_deg'が見つかりません

GCC4.7.3を使用しています。(arm-none-eabi-g++-std=c++0xフラグ付き)。

4

2 に答える 2

13

GCCはユーザー定義のリテラルを使用して型変換を行わないようです。たとえば、-10in-10_degは整数と見なされます。

すべての数字に追加.0すると、うまくいけばうまくいくはずです:

static const float ANGLES[] = {-20.0_deg, -10.0_deg, 0.0_deg, 10.0_deg, 20.0_deg};

もちろん、int引数として別の演算子関数を追加することもできます。

于 2013-01-16T10:15:30.337 に答える
8

定義を追加する

constexpr float operator "" _deg(unsigned long long d) {
    // returns radians
    return d*3.1415926535/180;
}

それを機能させます。

于 2013-01-16T10:20:38.837 に答える