значение становится 0 без видимой причины - PullRequest
1 голос
/ 31 мая 2011

по какой-то причине создаваемое мной значение mod становится равным 0 в keygen, несмотря на то, что оно правильно, когда оно выполнено и после запуска keygen.я не понимаю почему.Кто-нибудь может мне сказать?

class RC5{
    private:
        uint64_t w, r, b;
        uint128_t mod;
        std::string mode;
        std::vector <uint64_t> S;

    public:
        RC5(std::string KEY, std::string MODE, uint64_t W = 32, uint64_t R = 12, uint64_t B = 16){
            uint128_t mod = 1;
            mod <<= W;
            mode = MODE;
            w = W;
            r = R;
            b = B;
            std::cout << mod << std::endl;         // 1 << 32
            keygen(KEY);
            std::cout << mod << std::endl;         // 1 << 32 
        }

        void keygen(std::string key){
            std::cout << mod << std::endl;         // 0
            // lots of commented out stuff
        }
};

Я уверен, что uint128_t написано правильно, так что это, кажется, не имеет смысла.при необходимости, uint128_t можно найти здесь .

Ответы [ 2 ]

10 голосов
/ 31 мая 2011

erm, потому что в ctor вы модифицируете локальную переменную с именем mod, которая скрывает вашего члена класса.

3 голосов
/ 31 мая 2011

Эта часть RC5

uint128_t mod = 1;
mod <<= W; 

создает новую локальную переменную mod, которая скрывает члена класса. В keygen вы используете другой mod.

...