error: expected ')' for ternary condition

error: expected ')' for ternary condition

我正在我的代码中编写以下三元条件:

auto shift = 
    (auto diff1 = setPositions.back() - setPositions.front()) ==
    (auto diff2 = posM - posN) ?
        diff1 :
        diff1 > diff2 ?
        diff2 - (diff1 - diff2) :
        diff1 + (diff2 - diff1);

以上代码出现在构造函数定义中。 class 声明如下:

typedef int32_t THIRTY_TWO_BIT_INT;

class setBits{

    public:
        setBits(THIRTY_TWO_BIT_INT, THIRTY_TWO_BIT_INT, 
                unsigned short, unsigned short
               );
        ~setBits();
    private:
        THIRTY_TWO_BIT_INT valA;
        THIRTY_TWO_BIT_INT valB;
        unsigned short posN;
        unsigned short posM;
        THIRTY_TWO_BIT_INT result;
        vector<int>setPositions;
        void calcSetPositions(THIRTY_TWO_BIT_INT&);
        THIRTY_TWO_BIT_INT bm;
        void calcBitMask();
        void remRedSetBits(THIRTY_TWO_BIT_INT&);

};

对于上面的三元条件代码,我得到以下编译错误:

1 In file included from main.cpp:1:
   2 ./code.hpp:42:15: error: expected ')'
   3         (auto diff1 = setPositions.back() - setPositions.front()) ==
   4               ^
   5 ./code.hpp:42:9: note: to match this '('
   6         (auto diff1 = setPositions.back() - setPositions.front()) ==
   7         ^

谁能指出这个错误的原因?

您不能像那样在 ?: 运算符中声明新变量。您必须将代码分解为多个语句,例如:

auto diff1 = setPositions.back() - setPositions.front();
auto diff2 = posM - posN;
auto shift = 
    (diff1 == diff2) ?
        diff1 :
        (diff1 > diff2) ?
            diff2 - (diff1 - diff2) :
            diff1 + (diff2 - diff1);