错误:预期')'为三元条件

时间:2018-01-24 02:26:51

标签: c++11 compiler-errors ternary-operator

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

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

上面的代码出现在构造函数定义中。课堂声明如下:

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         ^

有人可以指出这个错误的原因吗?

1 个答案:

答案 0 :(得分:0)

您无法在auto diff1 = setPositions.back() - setPositions.front(); auto diff2 = posM - posN; auto shift = (diff1 == diff2) ? diff1 : (diff1 > diff2) ? diff2 - (diff1 - diff2) : diff1 + (diff2 - diff1); 运算符内声明新变量。您必须将代码分解为多个语句,例如:

messageSource