平菓菓 2014-10-12 15:59 采纳率: 0%
浏览 3825

77: error: expected unqualified-id before '^' token

#define TO_SIGNED(x)    ((signed)(x))
class BigInteger{
protected:
    unsigned* array;

    BigInteger(unsigned*const theArray){
        array = theArray;
    }

    inline unsigned* getArray(){
        if(this == BigIntegerNull)
        #ifdef _EXCEPTION_H_
            throw NullPointerException();
        #else
            return NullArray;
        #endif
        return array;
    }

    BigInteger expand(unsigned newSize, bool extendSign){
        if(getArray() == NullArray){
            BigInteger n(NullArray);
            return n;
        }
        if(newSize <= array[0]) return *(new BigInteger(*this));
        BigInteger nbi(new unsigned[newSize+1]);
        register unsigned i;
        for(i = 0; i <= array[0]; i++) nbi.array[i] = array[i];
        if(extendSign && TO_SIGNED(array[array[0]]) < 0){
            for(; i <= newSize; i++) nbi.array[i] = -1;
        }else{
            for(; i <= newSize; i++) nbi.array[i] = 0;
        }
        return nbi;
    }
public:

    static BigInteger*const BigIntegerNull;
    static unsigned*const NullArray;

    BigInteger(const BigInteger& origin){
        #ifdef _EXCEPTION_H_
        if(origin.getArray() == NullArray)
            throw NullPointerException();
        #endif
        register unsigned size = origin.array[0]+1;
        array = new unsigned[size];
        do{
            --size;
            array[size] = origin.array[size];
        }while(size > 0);
    }

    BigInteger _xor(BigInteger bi, bool extendSign){
        if(getArray() == NullArray || bi.getArray() == NullArray){
            BigInteger n(NullArray);
            return n;
        }
        register unsigned i;

        if(array[0] <= bi.array[0]){
            for(i = array[0]; i > 0; i--) array[i] &= bi.array[i];
        }else{
            for(i = 1; i <= bi.array[0]; i++){
                array[i] ^= bi.array[i];
            }
            if(extendSign && TO_SIGNED(bi.array[bi.array[0]]) < 0){
                for(; i <= array[0]; i++){
                    array[i] = -1;  // or -1
                }
            }
        }

        return *this;
    }

    BigInteger xor(BigInteger bi, bool extendSign){    // 编译器指示错误的行
        BigInteger n(NullArray);
        if(getArray() == NullArray || bi.getArray() == NullArray){
            return n;
        }
        register unsigned i;
        if(array[0] <= bi.array[0]){
            n = this->expand(bi.array[0], extendSign);
            for(i = array[0]; i > 0; i--){
                n.array[i] ^= bi.array[i];
            }
            if(extendSign && TO_SIGNED(bi.array[bi.array[0]]) < 0){
                for(; i <= bi.array[0]; i++){
                    n.array[i] = ~bi.array[i];  // xor -1
                }
            }else{
                for(; i <= bi.array[0]; i++){
                    n.array[i] = bi.array[i];   // xor 0
                }
            }
        }else{
            n = *(new BigInteger(*this));
            for(i = 1; i <= bi.array[0]; i++){
                n.array[i] ^= bi.array[i];
            }
            if(extendSign && TO_SIGNED(bi.array[bi.array[0]]) < 0){
                for(; i <= array[0]; i++){
                    n.array[i] = ~array[i]; // xor -1
                }
            }
        }
        return n;
    }
};
BigInteger*const BigInteger::BigIntegerNull = reinterpret_cast<BigInteger*>(0);
unsigned*const BigInteger::NullArray = reinterpret_cast<unsigned*>(0);
  • 写回答

1条回答 默认 最新

  • ChatGPTᴼᴾᴱᴺᴬᴵ 2023-03-24 19:53
    关注

    该回答引用ChatGPT-3.5

    这个错误通常是由于在定义函数之外使用了无效的符号(“^”符号),可能是由于缺少必需的头文件或定义,或者代码的上下文缺少所需的内容。从代码中看,您的问题可能是由于在某个位置未定义的符号“BigIntegerNull”或“NullArray”引起的。您可以尝试在函数之前添加这些符号的定义,或者检查代码的其他部分是否已定义这些符号。


    此外,请注意,如果这个代码段不是作为类的一部分而是作为一个独立的函数,那么编译器可能会认为“^”符号是位异或操作符,而不是指针符号。在这种情况下,您可以尝试使用括号明确指定符号的优先级,例如使用“( * )”来指定指针,例如“( *bi)”而不是“bi^”。

    评论

报告相同问题?

悬赏问题

  • ¥100 求数学坐标画圆以及直线的算法
  • ¥100 c语言,请帮蒟蒻写一个题的范例作参考
  • ¥15 名为“Product”的列已属于此 DataTable
  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 自己瞎改改,结果现在又运行不了了
  • ¥15 链式存储应该如何解决
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站